天天看點

[MySQL FAQ]系列 — 不同的binlog_format會導緻哪些SQL不會被記錄

我們都知道binlog_format有三種可選配置:STATEMENT、ROW、MIXED,相應地,基于這三種模式的Replication分别稱為SBR(STATEMENT BASED Replication)、RBR、MBR。 同時,我們也知道,MySQL Replication可以支援比較靈活的binlog規則,可以設定某些庫、某些表記錄或者忽略不記錄。

通常地,我們強烈建議不要設定這些規則,預設都記錄就好,在Slave上也是如此,預設所有庫都進行Replicate,不要設定DO、IGNORE、REWRITE規則。 如果非要設定這些規則的話,可能會導緻某些場景下或者某些特定的SQL無法被記錄,就需要特别注意了。

我經過比較簡單的測試,不同的binlog_format可能會導緻某些SQL不被記錄的情況總結如下:

上面的測試區分了兩種模式,一種是連接配接時指定了其他資料庫,一種是連接配接時未指定任何資料庫,相當于下面的兩種方式:

#假設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,也就是連接配接後會讀取資料庫、表、字段資訊,以便自動補齊。

更多情況請讀者自行進行測試吧 :)