工作中InnoDB引擎数据库主从复制同步心得51CTO博客 - 超凡娱乐

工作中InnoDB引擎数据库主从复制同步心得51CTO博客

2019年03月10日11时33分16秒 | 作者: 浩气 | 标签: 数据库,引擎,同步 | 浏览: 1605

近期将公司的MySQL架构晋级了,由原先的一主多从换成了DRBD+Heartbeat双主多从,正好手上有一个电子商务网站新项目也要上线了,用的是DRBD+Heartbeat双主一从,由于此进程仍是有别于曾经的MyISAM引擎的,所以这儿也将其心得概括总结了一下:

1)MySQL的replication进程是一个异步同步的进程,并非彻底的主从同步,所以同步的进程中是有推迟的,假如做了读写别离的事务的话,主张也要监控此推迟时间;

2)MySQL的master与slave机器记住server-id要坚持不一致,假如相同的话,replication进程中会呈现如下报错:

Fatal error: The slave I/O threadstopsbecause master and slavehave equal MySQL server ids; these ids mustbedifferent for replication to work(or the replicate-same-server-id optionmustbe used on slave but this doesnot always make sense; please check themanualbefore using it).

这个问题很好处理,行将slave机的server-id修改成跟master机器不一致即可。

3)我曾经的一个误区就是,slave机器是用自己的二进制日志来完结replication进程的,其实不是这样的,依据仿制的作业原理:slave服务器是copy主服务器的二进制日志到自己的中继日志,即relay-log日志(即centos3-relay-bin.000002这种姓名的)中,然后再把更新运用用到自己的数据库上,所以slave机器是不需求敞开二进制日志的,这样进程相同会成功的;除非是预备做主主架构,这才需求slave机器敞开二进制日志,这个问题一向在导着我,我以一向认为slave机器建立replication环境时是一定要敞开二进制的,

4)在master机器上授权时,尽量只给某一个或某几个固定机器权限,让它们只要replication slav,replication client权限,尽量不要给grant权限;别的,尽管数据库咱们一般是通过内网操作,但越是在在内网对MySQL数据库进行授权操作,越是要注意安全;

5)replication建立进程依照正常流程走的话,一般很简单施行成功,假如犯错的话,多查看下网络环境、权限问题,一般来说整个建立进程应该仍是会比较顺利的。

在数据库规划初期,我现已将此电子商务的数据库引擎界说为InnoDB,除了数据库华夏有的体系表之外,其它表悉数由MyISAM转成了InnoDB,原因有二:

1)电子商务事务会涉及到买卖付款,在这种根本OLTP的运用中,InnoDB应该作为中心运用表的首选存储引擎;

2)DRBD体系重启时的进程会比较缓慢,会频频的读表,假如表引擎为MyISAM的话极有或许呈现损坏状况,为了形成不必要的问题,我将数据库的表引擎由MyISAM均转成了InnoDB引擎的表。

DRBD+Heartbeat+MySQL参阅曾经的作业文档,建立的比较顺利,就是在建立replication环境时遇到了1062报错,具体进程如下:

初期参阅MySQL手册操作,取master机器的快照备份,用的是single-transaction选项,然后同步进程频频1062报错,报错日志如下:

Last_SQL_Error: Error Duplicate entryd36ad91bff36308de540bbd9ae6f4279 for key PRIMARY on query. Defaultdatabase: myproject. Query: INSERT INTO `lee_sessions` (`session_id`,`ip_address`, `user_agent`, `last_activity`, `user_data`) VALUES(d36ad91bff36308de540bbd9ae6f4279, 180.153.201.218, Mozilla/4.0,1353394206, )

后来改动思路,用master-data选项来取主master快照备份,指令如下所示:

mysqldump -uroot quickflush-logsmaster-data=1 -p myproject > myproject.sql

附注:master-data的用法为:通过此参数来备份SQL文件时会主张一个slavereplication,当其值为1时,SQL文件中会记载change master句子;当其值为2时,change master会被写成SQL注释,master-data在没有运用single-transaction选项的状况下会主动运用lock-all-tables选项(即这二代选项不要调配运用)。怎么查找SQL中的的LOG_FILE及LOG_POS呢?咱们可以用如下指令(请注意change单词要写成大写的),如下所示:

grep "CHANGE"myproject.sql

指令显现成果如下:

CHANGE MASTER TOMASTER_LOG_FILE=mysql-bin.000008,MASTER_LOG_POS=106;

接下来的replication进程就不具体说明晰,同步完结后咱们通过适当长期的调查,再也没1062报错了,如下所示:

mysql> show slave status \G;
*************************** 1.row***************************
     Slave_IO_State: Waitingformaster to send event
      Master_Host: 192.168.11.174
      Master_User: rep1
      Master_Port: 3306
      Connect_Retry: 60
      Master_Log_File: mysql-bin.000008
    Read_Master_Log_Pos: 27880
     Relay_Log_File:centos3-relay-bin.000002
      Relay_Log_Pos: 28025
  Relay_Master_Log_File: mysql-bin.000008
     Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
      Replicate_Do_DB:
    Replicate_Ignore_DB:
   Replicate_Do_Table:
   Replicate_Ignore_Table:
  Replicate_Wild_Do_Table:
 Replicate_Wild_Ignore_Table:
       Last_Errno: 0
       Last_Error:
       Skip_Counter: 0
    Exec_Master_Log_Pos: 27880
      Relay_Log_Space: 28182
      Until_Condition: None
     Until_Log_File:
      Until_Log_Pos: 0
   Master_SSL_Allowed: No
   Master_SSL_CA_File:
   Master_SSL_CA_Path:
      Master_SSL_Cert:
    Master_SSL_Cipher:
     Master_SSL_Key:
  Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
      Last_IO_Errno: 0
      Last_IO_Error:
     Last_SQL_Errno: 0
     Last_SQL_Error:
1 row in set (0.00 sec)

作业中InnoDB引擎数据库主从仿制同步心得曾经的项目也比较多的牵涉到InnoDB数据库的备份及replication,较多的一个做法是停库进行replication,尽管也是解决问题的一种思路,但毕竟归于停机保护,在一些特别运用场景中是不允许的,咱们应该多测验选用mysqldump这种逻辑备份方法来取master主机快照。

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表超凡娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章