MySQL5.7到MariaDB10.2的主从同步,
MariaDB和MySQL本是同根生,所以用MySQL和MariaDB之间做主从同步从本质上来说和MySQL之间的同步并无差别,但是在设置主从同步的过程中还是遇到了一些问题。
首先介绍基本情况:
主库MySQL5.7,OS:Windows 7 IP :10.77.40.1
从库MariaDB10.2,OS:CentOS 6.5 IP:10.77.40.2
======================================================================
流程:
1.配置主库
1.1启动binlog,确定server_id
MySQL5.7的高级信息配置还在my.ini(C:\ProgramData\MySQL\MySQL Server 5.7)中,而且在MySQL Installer中集成了高级配置选项,所以每次要修改配置都得重新运行一次MySQL Installer,比修改my.ini稳妥,有关binlog的配置也在这个里面,简单,给binlog起个名字就行了。
master的server_id一般设置为1
1.2创建slave用户
slave用户需要有权限读取master的binlog,所以创建一个新用户‘backup’,配置密码为1234,方便起见,直接赋予该用户所有权限
exp:CREATE USER 'user'@'host'IDENTIFIED BY 'pwd';
CREATE USER 'backup'@'10.77.40.2' IDENTIFIED BY '1234';
exp:GRANT all privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;
GRANT all privileges ON *.* TO 'backup'@'10.77.40.2' WITH GRANT OPTION;
刷新:FLUSH PRIVILEGES;
2.配置从库
2.1配置my.cnf
MariaDB的配置文件和MySQL基本一致,没有什么需要修改的,把server_id设置成一个大于等于2的数就行了,较老版本的MySQL使用my.cnf配置需要同步的master信息,但目前这种方式已经被废弃了。
2.2配置master基本信息
目前使用CHANGE MASTER TO ...的方式配置master信息
exp: change master to master_host='10.77.40.1', master_user='backup', master_password='1234';
ref.: CHANGE MASTER TO 用法
2.3配置master binlog信息
在主库中:SHOW MASTER STATUS \G
可以看到binlog的信息:
exp:
从中我们可以看到目前数据库中只有一个binlog文件,当前的event偏移位置是785。
change master to master_log_file='mysql-bin.000001',master_log_pos=785;
一般这么做出现问题的概率较大,建议先做sqldump,然后 RESET MASTER; 重置bionlog
查看从库端信息
这时候在从库端使用命令:SHOW SLAVE STATUS \G
exp:
出现:Slave_IO_State: Waiting for master to send event 基本就没问题了
基本流程结束
========================================================================
坑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则实现了同步。