MySQL 过滤复制数据的几个参数总结

这篇博客总结了MySQL中涉及复制过滤的几个参数,如--binlog-do-db, --binlog-ignore-db等,解释了它们在Statement和ROW格式下的不同行为,以及在作为slave服务器时如何过滤数据库和表级别的变更。特别强调了在使用--replicate-do-table和--replicate-ignore-table时应配合ROW based replication以避免错误。" 124496824,8277401,Python实现个税计算器,"['Python', '开发语言', '计算逻辑']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这几个参数,大多都会有坑,所以请仔细的看过说明再使用,这些参数包括:

--binlog-do-db, --binlog-ignore-db, --replicate-do-db, --replicate-ignore-db,  --replicate-do-table, --replicate-ignore-table, --replicate-wild-do-table, --replicate-wild-ignore-table


每个do和ignore都是一对,下面是含义以及注意事项:

--binlog-do-db, --binlog-ignore-db:表示当前的MySQL server是否在某个数据库下记录binlog。


这个参数与binlog_format 紧密相关,当binlog_format是Statement的时候:

记录默认数据库下的所有操作,也就是use过的数据库为默认数据库。

举例:

<pre name="code" class="html">--binlog-do-db=test
use test;
INSERT INTO t1 VALUES(1,2,3);
INSERT INTO test2.t1 VALUES(1,2,3);

 这两条都会被记录到binlog中 

当binlog_format是ROW的时候:

--binlog-do-db=test
use test;
INSERT INTO t1 VALUES(1,2,3);
INSERT INTO test2.t1 VALUES(1,2,3);
这两条记录中只会记录test.t1这一条,也就是ROW 模式下,会记录这个数据库下的所有表的修改情况。

同理,--binlog-ignore-db只是意思与--binlog-do-db相反,记录规则一样。


趁热打铁,说一下--replicate-do-db, --replicate-ignore-db

这两个参数是说本MySQL server应用复制数据的时候过滤的条件。在被当做slave的时候有用。

--replicate-do-db,应用主的某个数据库(schema)下的修改。

--replicate-ignore-db,不应用主的某个数据库(schema)下的修改。

举例:

当主的binlog_format是Statement的时候:

主的binlog形象表示如下

<pre name="code" class="html">--replicate-do-db=test
use test;
INSERT INTO t1 VALUES(1,2,3);
INSERT INTO test2.t1 VALUES(1,2,3);

 这两条都会被应用到本MySQL server。 

如果主的binlog形象表示如下

--replicate-do-db=test
use test2;
INSERT INTO t1 VALUES(1,2,3);
INSERT INTO test.t1 VALUES(1,2,3);
这两条就都不会被应用。

举例:

当主的binlog_format是ROW的时候:

--replicate-do-db=test
use test;
INSERT INTO t1 VALUES(1,2,3);
INSERT INTO test2.t1 VALUES(1,2,3);
这两条记录中只会记录test.t1这一条,也就是ROW 模式下,会记录这个数据库下的所有表的修改情况。

同理,--binlog-ignore-db只是意思与--binlog-do-db相反,记录规则一样。

以上的参数都是数据库级别的过滤,下面的为表级过滤

 --replicate-do-table, --replicate-ignore-table

参照手册可以知道,如果是Statement based replication 并且语句是包含在stored function中的,本MySQL server (slave)将会执行这条语句然后退出。也就是会出错。

所以,强烈建议在使用 --replicate-do-table, --replicate-ignore-table的时候,一定要使用ROW based replication。


 --replicate-wild-do-table, --replicate-wild-ignore-table

这个参数与上面的 --replicate-do-table, --replicate-ignore-table基本一样,只是它的参数是数据库的pattern。


本文主要是帮助理解这些参数,具体全面的用法请一定参考手册。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值