MySQL5.7的多源复制

基本环境

  • 全部基于GTID复制
  • Master
    • 在192.168.1.102上面搭建多实例,端口分别是3306,3307
  • Slave
    • 在192.168.1.103上面搭建3306端口的实例

约束

  • 每个实例上DB名字不能一样
  • 创建用户或是复制用户名时名字不能一样,如果经常遇到一样的账号或是为了规范常见的账号是一样的,考虑在Slave的过滤规则把mysql库复制忽略掉

主库配置

Master1

  • gtid-mode=on
  • enforce-gtid-consistency=1
  • binlog_format=row
  • server-id=3306102
  • log-bin=/data/mysql/mysql3306/logs/mysql-bin
  • skip-slave-start=1

Master2

  • gtid-mode=on
  • enforce-gtid-consistency=1
  • binlog_format=row
  • server-id=3307102
  • log-bin=/data/mysql/mysql3307/logs/mysql-bin
  • skip-slave-start=1

创建复制用的账号

从库配置

Slave

  • gtid-mode=on
  • enforce-gtid-consistency=1
  • binlog_format=row
  • server-id=3306103
  • log-bin=/data/mysql/mysql3307/logs/mysql-bin
  • skip-slave-start=1
  • master-info-repository=TABLE
  • relay-log-info-repository=TABLE

change master to master_host='192.168.1.102',master_port=3306,master_user='repl',master_password='repl4slave',master_auto_position=1 for channel 'master-3306102';
change master to master_host='192.168.1.102',master_port=3307,master_user='repl',master_password='repl4slave',master_auto_position=1 for channel 'master-3307102';

常用管理命令

  • 开关复制
    • start slave [tread_type][for channel ...]
  • 监控
    • show slave status [for channel...]
    • select * from performance_schema.replication_connection_configuration
    • select * from performance_schema.replication_connection_status

多源复制出错处理

  • binlog+position
    • stop slave sql_thread for channel 'master-3307102';
    • set global sql_slave_skip_counter=1;
    • start slave sql_tread for channel 'master-3307102';
  • GTID
    • stop slave sql thread for channel 'master-3307102';
    • set gtid_next='uuid:N';
    • begin;commit;
    • set gtid_next='automatic';
    • start slave sql_tread for channel 'master-3307102';

复制账号重复问题

  • 第一种
set sql_log_bin=0;
create user ...
grant ...
set sql_log_bin=1;
  • 第二种
stop slave sql_thread;
change replication filter Replicate_Ignore_DB=(mysql);
start slave sql_thread;

对一个运行很久的库做备份恢复建同步

环境

  • Master
    • 在192.168.1.102上面搭建多实例,端口分别是3306,3307
  • Slave
    • 在192.168.1.103上面搭建3306端口的实例
  • 前提条件
    • 3306102和3306103是运行很久的一对主从复制,现在想把3307102加进来,变成多源复制
  • 先将3307102数据备份出来hetan3307.sql
  • 这个时候导入数据会报错,就是gtid_purged没有清空的原因
  • 在从库上执行
    • stop slave;
    • show master status;
    • 记录下Executed_Gtid_Set的值
    • more hetan3307.sql
    • 记录下它的gtid的值
    • mysql -f -S /tmp/mysql.sock -p < /path/hetan3307.sql #强制导入一下
    • reset master; #清空从库的purge信息
    • set gtid_purged='上面两个的gtid值,逗号隔开';
    • 执行change master to语句,先执行3307102的,看一下能不能正常复制,可以就不用再执行3306102的,不行就将3306102的也change一下
    • start slave;

你可能感兴趣的:(MySQL5.7的多源复制)