1. 三者的联系
1.1. 设置 binlog-do-db 与 binlog-ignore-db
[mysqld]
binlog-do-db = db01
binlog-ignore-db = db02
1.2. 不同 binlog format 下进行测试
1.2.1. STATEMENT
- 没有 use dbname 或者 use db02
create table db01.table01(id int primary key auto_increment);
insert into db01.table01 values(1);
create table db02.table01(id int primary key auto_increment);
insert into db02.table01 values(1);
结果:binlog 没有记录 DDL 或者 DML 语句。
说明:在 binlog_format = STATEMENT 时,如果未选择数据库或者选择的并不是 binlog-do-db 包含的数据库,则不会有任何记录。
- use db01
结论:DDL 和 DML 全部被记录。不过令人遗憾的是,就连我们希望忽略的 db02 也会出现在 binlog 中。
1.2.2. ROW
- 没有 use dbname 或者 use db02
结果:DDL 没有被记录;DML 被记录。
- use db01
结果:有关 db01 的 DDL 或 DML 能够全部记录,对于其它表只能记录 DML。
- 结论
在 ROW 模式下,DML 一定会被记录。但是,只有 use 的数据库存在于 binlog-do-db 中时,DML 也才会被记录。
1.2.3. MIXED
- 未选择数据库或者 use db02
结果:忽略了所有 DDL 和 DML。
- use db01
结果:任何 DDL 和 DML 全被记录。
- 结论
规律跟模式 STATEMENT 类似,只有当 use 的数据库存在于 binlog-do-db 时,才会记录 DML 或者 DDL。
2. 一些感想
所以,binlog-ignore-db 到底是干嘛的呢?