關於MySQL Binlog類型的一個謠言

  衆所周知,MySQL的Binlog可以是三種類型:Statement、Row、Mixed。Statement的特點是每次只存儲一條語句,Row的特點是存儲每行數據的變化情況,Mixed是前兩種的混合。於是,網上很多資料都提到,Row模式下執行單條語句可能造成很多log條目,因爲改變了表的結構,比如alter table,造成了每行數據都發生了變化。實際上,這個說法是錯誤的!

  alter table、drop table、create table等信息即使在Row模式下也不會產生大量的log條目,因爲它還是記錄的語句,而不是單行數據的變化情況。MySQL的官方文檔是這麼說的

wKioL1L40PWhQBPFAAIZpEuM2W0511.jpg

   如果使用binlog解析,也能看到alter、drop、create語句會在log裏面體現爲一個Query事件,在message字段記錄了數據庫語句。

   Mixed,選擇性的使用面向行數據變化的Row方式記錄,主要是面對一些未決語句(nondeterministic),考慮到安全問題,避免主從庫之間數據出現不一致,比如語句面向多行插入,其中又有auto-increment的字段,數據庫存儲引擎不同,可能帶來插入順序不一樣的問題,結果就是自增列數據不一致。

   Row和Statement的記錄方式的選擇,按照文檔指出的如下規則:

wKiom1L41TDAIffAAAOotpOYYu8082.jpg

   這篇日誌還不錯,看不出什麼問題來,可以用來參考。

http://blog.itpub.net/15480802/viewspace-758064

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章