MySQL binlog format & binlog-do-db & binlog-ignore-db

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 到底是干嘛的呢?

你可能感兴趣的:(MySQL binlog format & binlog-do-db & binlog-ignore-db)