MySQL复制过滤器配置方法
方法一:直接修改配置文件(需要重启)
1、主库配置
replicate_do_db ="db1";#复制的库白名单
replicate_ingore_db ="db2"; #复制的库黑名单
replicate_do_table="db1.t1%";#复制的表白名单
relicate_ingore_table="db2.t2%";#复制的表黑名单
【注】模糊匹配可以使用通配符。
2、从库配置
replicate_wild_do_table="";
replicate_wild_ignore_table="";
【注】在从库配置的优势在于,主库设置replicate_do_db或replicate_ignore_db后,MySQL执行sql检查的默认是当前数据库,所以在跨库更新语句的时候,SQL在slave上会被忽略,如:
主库设置了:replicate_ignore_db=db2
use db2;
update db1.t1 set ......
那么slave节点上第二句set会被忽略执行
如在Master服务器上设置 replicate_do_db=db1
use db2;
update db1.t1 set ......
那么slave节点上第二句将不会被执行
方法二:在线修改(无需重启)
1、db1、db2加入复制白名单
mysql> show databases;
mysql> CHANGE REPLICATION FILTER REPLICATE_DO_DB = (db1, db2);
*ERROR 3017 (HY000): This operation cannot be performed with a running slave sql thread; run STOP SLAVE SQL_THREAD first*
【注】上述报错有2中解决方案(1)STOP SLAVE SQL_THREAD; (2)stop slave;
mysql> stop slave;
mysql> CHANGE REPLICATION FILTER REPLICATE_DO_DB = (db1, db2);
mysql> stop slave; #启动slave即可恢复主从同步
mysql> CHANGE REPLICATION FILTER REPLICATE_DO_DB = ();#取消白名单
2、db1、db2加入复制黑名单
mysql> stop slave;
mysql> CHANGE REPLICATION FILTER Replicate_Ignore_DB=(db1,db2);
mysql> start slave;
#取消复制过滤
mysql> stop slave;
mysql> CHANGE REPLICATION FILTER Replicate_Ignore_DB=();
mysql> start slave;
3、db1.t1%、db2.t2%,加白db1中t1开头的表,拉黑db2中t2开头的表
mysql> stop slave;
mysql>CHANGE REPLICATION FILTER REPLICATE_WILD_DO_TABLE = ('db1.t1%'),REPLICATE_WILD_IGNORE_TABLE = ('db1.t2%');
mysql> start slave;
#取消配置
mysql> stop slave;
mysql>CHANGE REPLICATION FILTER REPLICATE_WILD_DO_TABLE = (),REPLICATE_WILD_IGNORE_TABLE = ();
mysql> start slave;
作者:UStarGao
链接:https://www.starcto.com/mysql/72.html
来源:STARCTO
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
UCloud云平台推荐
随便看看
- 2021-04-03Linux使用PaPing进行TCP端口连通性/网络平均延迟探测
- 2022-06-22MySQL如何创建全文索引
- 2021-06-21MySQL字符集变量介绍
- 2021-01-26Linux逻辑卷/分区扩容
- 2021-08-20Jupyter Notebook工具介绍