您好,登錄后才能下訂單哦!
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,以避免某些情況下的主從數據不一致發生。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。