mysql 5.7多源复制如何去掉一个复制源
发布网友
发布时间:2022-04-09 14:36
我来回答
共3个回答
热心网友
时间:2022-04-09 16:05
GTID 对于单源复制还是很方便,但是对于多源复制,这里就需要特别注意:
要先停止所有的从库 stop slave;
然后清理本机所有的 GTID,reset master;
再进行 SET @@GLOBAL.GTID_PURGED='xxxxx' gtid 设置
这里就会引入一个问题,如果是级联复制的情况下,reset master 的时候,会把本机的所有 binlog 清理掉。如果下一级的从库存在延迟,没有及时的把 binlog 传过去,就会造成主从中断,这里我们该怎么避免呢?看这里:做 reset master 的时候,先看看下游的从库是否存在很大的延迟。如果存在,把当前的 binlog 和后面未同步的 binlog 全部备份下;
待添加好从库的 channel 后,再把未同步的 binlog 文件手动拷贝到 binlog 目录;
更新下 mysql-bin.index 文件;
注意,binlog 不能同名,需要手动更新下文件。
热心网友
时间:2022-04-09 17:23
1
2
<strong><span style="font-size: 18pt;">一从两主:多源复制
</span></strong>
每台mysql 服务器都需要加
my.cnf要加两个参数才可以在GTID多源复制
master-info-repository=TABLE
relay-log-info-repository=TABLE
server1:只接受下面两种数据库,这两种数据来源不同的通道,系统表不复制
replicate_do_db=db1
replicate_do_db=db2
server1 连到 slave1
mysql> change master to master_host='10.24.220.70',master_user='repl',master_password='123',master_port=3306,master_auto_position=1 for channel 'slave1';server1 连到 slave2
mysql> change master to master_host='10.169.214.33',master_user='repl',master_password='123',master_port=3306,master_auto_position=1 for channel 'slave2';
server1:
mysql> start slave; //两个通道一起起动了
Query OK, 0 rows affected (0.02 sec)
mysql> show processlist;
+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
| 2 | root | localhost | NULL | Query | 0 | starting | show processlist |
| 8 | system user | | NULL | Connect | 3 | Waiting for master to send event | NULL |
| 9 | system user | | NULL | Connect | 3 | Slave has read all relay log; waiting for more updates | NULL |
| 10 | system user | | NULL | Connect | 3 | Connecting to master | NULL |
| 11 | system user | | NULL | Connect | 3 | Slave has read all relay log; waiting for more updates | NULL |
+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
5 rows in set (0.00 sec)
热心网友
时间:2022-04-09 18:58
去掉一个源,直接关闭那个channel就行,stop slave for channel 'channel_name';
这样该复制源就停止复制了。
如果要清除show slave status 和performance_schema中的channel信息,那么就需要用reset 语法了。
reset slave all for channel 'channel_name'; 这个语句只删除指定channel的信息,别的不会动的。
reset slave for channel 'channel_name'; 也能执行,但是不清除status和performance中的信息,和直接stop channel差别不大。
如果是生产库,千万小心执行reset语句。