1. 程式人生 > >pt-online-schema-change的bug2

pt-online-schema-change的bug2

pt-online-schema-cha

pt-online-schema-change工具依賴於觸發器的機制去實現表的無鎖DDL。那我們試想在一主一從的情況下,有個大表需要執行DDL操作,為了驗證該操作的執行時長,先用pt-online-schema-change工具在從庫上執行變更。確認沒有問題後再在主庫上執行變更。當然,在執行之前是需要開啟會話級的sql_log_bin=0以避免記錄到binlog。

但是我們從官方文檔中獲知如下:

技術分享圖片

很明顯,如果主從架構下,binlog的日誌格式是row的話,依賴觸發器機制的pt-online-schema-change是會造成數據丟失的。因為增量的數據無法通過觸發器去收集。也就是說,在基於主庫的binlog為row格式的情況下,從庫的觸發器是不會起作用的。因為主庫本身通過觸發器產生的變更已經寫入binlog同步到從庫。如果從庫的觸發器也生效的話,就會出現重復。

總結:在基於主從復制架構下,如果主庫binlog的日誌格式為row情況下,pt-online-schema-change工具必須在主庫執行才能避免主從數據不一致。如果日誌格式是statement的話,則可以先在從庫執行pt-online-schema-change再在主庫執行。但是目前官方也建議參數binlog_format設置為row,而非statement,以避免某些情況下的主從數據不一致發生。

pt-online-schema-change的bug2