先配主从同步,后将主库表老数据传输到从库
mysql
说明:api-server的数据库为主,其余harbor为从sql
[mysqld] log-bin = mysql-bin server-id = 1 //保证其余mysql不占用 |
grant replication slave,replication client on *.* to slave@'*' identified by "123456"; |
show master status |
[mysqld] server-id = 2 log-bin = mysql-bin replicate-do-table = registry.user //同步的数据库名.表名 slave-skip-errors = all #跳过全部的错误错误,继续执行复制操做 |
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'api
从MySQL5.6开始引入了binlog_checksum全局变量,即MySQL会将event的CRC32校验值也写入binlog,显然MariaDB在分析日志的时候不会考虑该信息,致使解析出错。markdown
解决方法:关闭主库的CRC校验,修改全局变量ide
在主库中 1 show variables like '%binlog%'; 2 set global binlog_checksum=NONE;url
坑2:spa
我以前使用的MySQL5.5与MariaDB10.2版本相差过大,致使设置同步的过程当中一直出现“Relay log write failure: could not queue event from master”的问题,因此升级了MySQL,这个问题获得解决。.net
解决这些问题就能实现MySQL到MariaDB的主从同步了,可是须要注意的是,主从同步的数据库只能使用同种引擎,通常就是无脑InnoDB,原本想使用MariaDB的columnStore列存储引擎,但因为主库使用的InnoDB,结果数据并无同步。而二者都是InnoDB则实现了同步。命令行