Mysql 单表主从同步

先配主从同步,后将主库表老数据传输到从库

说明:api-server的数据库为主,其他harbor为从

1.master

  • 配置文件更改
[mysqld]

log-bin = mysql-bin
server-id = 1   //保证其他mysql不占用
  • 创建用户
grant replication slave,replication client on *.* to slave@'*' identified by "123456";
  • 查看master二进制文件信息,并记录file和position
show master status

 

2.slave

  • 配置文件修改
[mysqld]

server-id = 2
log-bin = mysql-bin
replicate-do-table = registry.user    //同步的数据库名.表名
slave-skip-errors = all   #跳过所有的错误错误,继续执行复制操作
  • 进如msyql命令行模式
CHANGE MASTER TO
-> MASTER_HOST='master_host_name',     //主数据库地址
-> MASTER_USER='replication_user_name', //上面为同步创建的用户
-> MASTER_PASSWORD='replication_password', //密码
-> MASTER_LOG_FILE='recorded_log_file_name', // 上面查看二进制文件记录的file
-> MASTER_LOG_POS='recorded_log_pos'; //上面查看的position

 

  • 启动从模式 start slave;(启动之前可以reset slave)

     

  •  show slave status\G;
    			Slave_IO_Running: Yes     
                Slave_SQL_Running: Yes    
                  Replicate_Do_DB:
              Replicate_Ignore_DB:
               Replicate_Do_Table: registry.user  //同步的表 例如:tenxcloud_2_0.tenx_users

     坑1:

     Last_IO_Errno: 1236
     Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from position > file size'

    从MySQL5.6开始引入了binlog_checksum全局变量,即MySQL会将event的CRC32校验值也写入binlog,显然MariaDB在分析日志的时候不会考虑该信息,导致解析出错。

    解决方法:关闭主库的CRC校验,修改全局变量

    在主库中 1 show variables like '%binlog%'; 2 set global binlog_checksum=NONE;

    坑2:

    我之前使用的MySQL5.5与MariaDB10.2版本相差过大,导致设置同步的过程中一直出现“Relay log write failure: could not queue event from master”的问题,所以升级了MySQL,这个问题得到解决。

    解决这些问题就能实现MySQL到MariaDB的主从同步了,但是需要注意的是,主从同步的数据库只能使用同种引擎,一般就是无脑InnoDB,本来想使用MariaDB的columnStore列存储引擎,但由于主库使用的InnoDB,结果数据并没有同步。而两者都是InnoDB则实现了同步。

  • 感谢避坑 https://blog.csdn.net/ysaicll/article/details/78765771

 

posted @ 2018-08-07 15:55 丨Mars 阅读(...) 评论(...) 编辑 收藏