当前位置:Gxlcms > 数据库问题 > mysql主从同步分库分表同步

mysql主从同步分库分表同步

时间:2021-07-01 10:21:17 帮助过:3人阅读


              Replicate_Do_DB: sales
          Replicate_Ignore_DB: information_schema,mysql,user_info
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table: sales.story
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 150
              Relay_Log_Space: 419
              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:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 15
1 row in set (0.00 sec)

ERROR:
No query specified

上述表示数据库master and slave 已配置好,可以进行同库单个表的配置


测试:

1.分别在master和slave创建数据库sales(row模式下需要手动创建数据库)。

2.use sales库下,在master上创建表

CREATE TABLE user_info (
    PersonID int,
    LastName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255) 
);

3.在master上创建表

CREATE TABLE story (
    PersonID int,
    LastName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255) 
);

查看slave同步状态:

a. story表同步成功

b. user_info表同步不成功


则mysql数据库单库,单表同步成功。

如果只是单库同步,则在slave的配置文件中去掉:

replicate-wild-do-table =sales.story    // 所要同步的数据库的单个表


在单表同步中当出现(高版本5.6.2及以上)master----(低版本5.6.2以下)slave

启动slave后,会报如下的错误:

[ERROR] Slave I/O: Got fatal error 1236 from master when reading data from binary log: ‘Slave can not handle replication events with the checksum that master is configured to log;


后查询资料后发现:在5.6.2中,新增了一个参数binlog_checksum,而且在5.6.6及以后的版本中,该参数的值由NONE改为了CRC32,master为5.6.30的情况下,自然有该选项参数(为了验证binlog events的正确,指定通过CRC32算法来避免出现events corrupt,所以这个选项参数出现了。),并且其值为CRC32,但slave为5.5.32,此时的该选项参数是不存在的。

【解决方案】:
直接在master上执行,即可:

  1. mysql> SET GLOBAL binlog_checksum=none;

当然也要加到配置文件的[mysqld]中,避免重启失效:

  1. [mysqld]

  2. binlog-checksum = none


注意:在该参数值还未修改之前的binlog,似乎也是无法被io thread所接收的,故之前的binlog可能需要手动执行来补数据了。
在修改之后的binlog中的events,则可以被正确的传输到slave上。









本文出自 “猫咪” 博客,请务必保留此出处http://yanruohan.blog.51cto.com/9740053/1923245

mysql主从同步分库分表同步

标签:mysql

人气教程排行