Mysql 多主一从即多源复制
环境信息
- Mysql 5.7 之后版本支持多主一从
配置步骤
分别在Master_1和Master_2上导出需要同步的数据库
分别在Master_1和Master_2上执行以下命令,导出需要同步的数据库备份
mysqldump -uroot -p123456 --master-data=2 --single-transaction --databases --add-drop-database db1 > db1.sql |
mysqldump -uroot -p123456 --master-data=2 --single-transaction --databases --add-drop-database db2 > db2.sql |
备份完成后,将备份数据拷贝到从库服务器上面
在Master_1和Master_2上创建复制账号
如果已有复制账号,跳过此步骤
分别在Master_1和Master_2上执行以下命令,创建复制账号
grant replication slave on *.* to 'repl'@'%' identified by '123456'; |
更改slave配置以支持多主一从
mysql支持多主一从(多源复制)的关键配置。
要配置mysql支持多源复制,必须配置mysql存储同步信息的方式,主要有以下2种方式 [1]
- FILE 默认配置,此时同步信息存储在文件master.info和relay-log.info
- TABLE 同步信息存储在mysql.slave_master_info和mysql.slave_relay_log_info
更改mysql配置文件(默认/etc/my.cnf),配置存储同步信息的方式
master_info_repository=TABLE |
更改配置后,重启mysql生效
slave上恢复Master_1和Master_2的备份数据
mysql -uroot -p < db1.sql |
因为在
mysqldump
备份时,使用了选项--add-drop-database
,slave导入备份时,无需指定db
slave上配置多源复制
找到配置主从需要的binlog位置和Pos位置
分别在Master_1和Master_2的备份数据中,查找以下内容,找到需要的binlog位置和Pos位置
cat db1.sql |grep " CHANGE MASTER" |
这些信息是由
mysqldump
的选项--master-data=2
提供 [2]
结果中包含以下类似内容:
CHANGE MASTER TO MASTER_LOG_FILE=’log-bin.000001’, MASTER_LOG_POS=1539;
登录salve数据库配置多源复制
登录slave数据库,分别执行以下命令,创建到Master_1和Master_2的复制
CHANGE MASTER TO MASTER_HOST='Master_1',MASTER_USER='repl', MASTER_PASSWORD='123456',MASTER_LOG_FILE='log-bin.000001',MASTER_LOG_POS=1539 FOR CHANNEL 'Master_1'; |
不同的主从复制以最后的
FOR CHANNEL
来区分
启动主从复制
在slave数据库中执行以下命令分别启动复制
start slave for channel "Master_1"; |
也可以通过 start slave;
启动所有的复制
可以通过以下命令查看启动复制后的状态
SHOW SLAVE STATUS FOR CHANNEL 'Master_1'\G |