不同的binlog_format会导致哪些SQL不会被记录

最后更新于:2022-04-01 21:02:26

我们都知道binlog_format有三种可选配置:STATEMENT、ROW、MIXED,相应地,基于这三种模式的Replication分别称为SBR(STATEMENT BASED Replication)、RBR、MBR。 同时,我们也知道,MySQL Replication可以支持比较灵活的binlog规则,可以设置某些库、某些表记录或者忽略不记录。 通常地,我们强烈建议不要设置这些规则,默认都记录就好,在Slave上也是如此,默认所有库都进行Replicate,不要设置DO、IGNORE、REWRITE规则。 如果非要设置这些规则的话,可能会导致某些场景下或者某些特定的SQL无法被记录,就需要特别注意了。 我经过比较简单的测试,不同的binlog_format可能会导致某些SQL不被记录的情况总结如下: [![mysql-faq-how-binlog-format-affect-replication](http://imysql.com/wp-content/uploads/2014/08/mysql-faq-how-binlog-format-affect-replication.png)](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-07-29_55b8749378beb.png) 上面的测试区分了两种模式,一种是连接时指定了其他数据库,一种是连接时未指定任何数据库,相当于下面的两种方式: ~~~ #假设do/ignore规则中的DB名字叫DoDB/IgnoreDB/RewriteDB的话,OtherDB是规则之外的其他DB #一种是:连接时指定了do/ignore/rewrite规则之外的其他DB mysql -h host -u user -p passwd -p port -A OtherDB #还有一种是:连接时不指定任何DB mysql -h host -u user -p passwd -p port -A #tips,加上 -A 是--no-auto-rehash的缩写,其作用是连接后不读取数据库、表、字段信息。与其相反的选项是 --auto-rehash,也就是连接后会读取数据库、表、字段信息,以便自动补齐。 ~~~ 更多情况请读者自行进行测试吧 :)
';