MySQL主从多源复制

MySQL在5.7.2上面添加了多源复制(Multi-Source)功能,意味着一个从库可以连多个主库,从而同时进行同步,但是如果是同一个表的话,会存在主键和唯一索引冲突的风险,需要提前做好规划

MySQL5.7中的从库进行同步的SQL_THREAD,IO_THREAD可以并发执行,这使得使多数据源的binlog同时同步变为可能。我们只需要对每一个Master执行Change Master 语句,只需要在每个语句最后使用For Channel来进行区分。

MySQL5.7中添加了channel(通道)来判别不同的数据源,这样slave可以非常简单的进行多数据源的配置与区分。

开始操作

前提:本次使用的binlog日志方式。手动指定binlog日志名称以及位置的方式;

# cat /etc/hosts
192.168.19.22 master1
192.168.19.21 master2
192.168.19.14 slave1
192.168.19.21 slave2

为4台虚拟机配置host解析(可做可不做)

修改4台mysql的配置文件

打开/etc/my.cnf,在[mysqld]标签下添加内容

server-id=1
log-bin=mylog
master-info-repository=TABLE
relay-log-info-repository=TABLE

 

 

 

#### 重新启动MySQL

[root@mysql-master1 ~]# systemctl restart mysqld

mysql-master1节点操作

[root@mysql-master1 ~]# mysql -uroot -p1
mysql> grant replication slave,replication client on *.* to 'master1'@'%' identified by '1';  --创建同步使用的用户

mysql> flush privileges;

mysql-master2操作如同mysql-master1一样步骤

 

双主配置

查看mysql-master2的binlog日志名称和位置:

在mysql-master1上指定操作:

mysql> change master to						--设置mysql-mastre2为自己的主节点
master_host='192.168.194.199',
master_user='master2',
master_password='1',
master_log_file='mylog.000001',
master_log_pos=612 for channel 'zhu2';
Query OK, 0 rows affected, 2 warnings (0.00 sec)

mysql> start slave;
mysql> show slave status\G

 查看mysql-master1的binlog日志名称和位置:

在mysql-master2上指定操作:

mysql> change master to						--设置mysql-mastre1为自己的主节点
master_host='192.168.194.130',
master_user='master1',
master_password='1',
master_log_file='mylog.000001',
master_log_pos=612 for channel 'zhu1';
Query OK, 0 rows affected, 2 warnings (0.00 sec)

mysql> start slave;
mysql> show slave status\G

 2台分别查看同步的io线程和sql线程是否为YES

mysql> show slave status\G

 

mysql> show slave status\G

 

 

 常用操作:

# 查看单个channel的状态
mysql> show slave status for channel 'mysql-master2'\G
# 停止单个channel同步
mysql>  stop slave for channel 'mysql-master2';
# 开启单个channel同步
mysql>  start slave for channel 'mysql-master2';
# 重置单个channel
mysql>  reset slave for channel 'mysql-master2';
# 查看所有channel
mysql> show slave status\G
# 开启所有channel
mysql> start slave;

双从配置

mysql-slave1

[root@mysql-slave1 ~]# systemctl start mysqld
[root@mysql-slave1 ~]# mysql -uroot -p'1'
mysql> change master to						--设置mysql-mastre1为自己的主节点
master_host='192.168.194.130',
master_user='master1',
master_password='1',
master_log_file='mylog.000001',   --我这里不一样,根据你自己的名称和位置去写
master_log_pos=154 for channel 'zhu1';
Query OK, 0 rows affected, 2 warnings (0.00 sec)
    
mysql> change master to						--设置mysql-mastre2为自己的主节点
master_host='192.168.194.199',
master_user='master2',
master_password='1',
master_log_file='mylog.000001',   --我这里不一样,根据你自己的名称和位置去写
master_log_pos=612 for channel 'zhu2';
Query OK, 0 rows affected, 2 warnings (0.00 sec)

mysql> start slave for channel 'zhu1';
Query OK, 0 rows affected (0.00 sec)

mysql> start slave for channel 'zhu2';
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G

 

mysql-slave2同样操作

[root@mysql-slave1 ~]# systemctl start mysqld
[root@mysql-slave1 ~]# mysql -uroot -p'1'
mysql> change master to						--设置mysql-mastre1为自己的主节点
master_host='192.168.194.130',
master_user='master1',
master_password='1',
master_log_file='mylog.000001',   --我这里不一样,根据你自己的名称和位置去写
master_log_pos=154 for channel 'zhu1';
Query OK, 0 rows affected, 2 warnings (0.00 sec)
    
mysql> change master to						--设置mysql-mastre2为自己的主节点
master_host='192.168.194.199',
master_user='master2',
master_password='1',
master_log_file='mylog.000001',   --我这里不一样,根据你自己的名称和位置去写
master_log_pos=612 for channel 'zhu2';
Query OK, 0 rows affected, 2 warnings (0.00 sec)

mysql> start slave for channel 'zhu1';
Query OK, 0 rows affected (0.00 sec)

mysql> start slave for channel 'zhu2';
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G

 最后查看验证。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值