Mysql 多主一从即多源复制

环境信息

  • Mysql 5.7 之后版本支持多主一从

配置步骤

分别在Master_1和Master_2上导出需要同步的数据库

分别在Master_1和Master_2上执行以下命令,导出需要同步的数据库备份

Master_1
mysqldump -uroot -p123456 --master-data=2 --single-transaction --databases  --add-drop-database  db1  > db1.sql
Master_2
mysqldump -uroot -p123456 --master-data=2 --single-transaction --databases  --add-drop-database  db2  > db2.sql

备份完成后,将备份数据拷贝到从库服务器上面

在Master_1和Master_2上创建复制账号

如果已有复制账号,跳过此步骤

分别在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),配置存储同步信息的方式

/etc/my.cnf
master_info_repository=TABLE
relay_log_info_repository=TABLE

更改配置后,重启mysql生效

slave上恢复Master_1和Master_2的备份数据

slave
mysql -uroot -p  < db1.sql
mysql -uroot -p < db2.sql

因为在 mysqldump 备份时,使用了选项 --add-drop-database,slave导入备份时,无需指定db

slave上配置多源复制

找到配置主从需要的binlog位置和Pos位置

分别在Master_1和Master_2的备份数据中,查找以下内容,找到需要的binlog位置和Pos位置

slave
cat db1.sql |grep " CHANGE MASTER"
cat db2.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的复制

slave
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';
CHANGE MASTER TO MASTER_HOST='Master_2',MASTER_USER='repl', MASTER_PASSWORD='123456',MASTER_LOG_FILE='log-bin.000001',MASTER_LOG_POS=1539 FOR CHANNEL 'Master_2';

不同的主从复制以最后的 FOR CHANNEL 来区分

启动主从复制

在slave数据库中执行以下命令分别启动复制

slave
start slave for channel "Master_1";
start slave for channel "Master_1";

也可以通过 start slave; 启动所有的复制

可以通过以下命令查看启动复制后的状态

slave
SHOW SLAVE STATUS FOR CHANNEL 'Master_1'\G
SHOW SLAVE STATUS FOR CHANNEL 'Master_2'\G
SHOW SLAVE STATUS\G

参考链接

Mysql 官网

脚注