这几个参数,大多都会有坑,所以请仔细的看过说明再使用,这些参数包括:
--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。
本文主要是帮助理解这些参数,具体全面的用法请一定参考手册。