pt-online-schema-change工具依賴於觸發器的機制去實現表的無鎖DDL。那咱們試想在一主一從的狀況下,有個大表須要執行DDL操做,爲了驗證該操做的執行時長,先用pt-online-schema-change工具在從庫上執行變動。確認沒有問題後再在主庫上執行變動。固然,在執行以前是須要開啓會話級的sql_log_bin=0以免記錄到binlog。sql
可是咱們從官方文檔中獲知以下:
架構
很明顯,若是主從架構下,binlog的日誌格式是row的話,依賴觸發器機制的pt-online-schema-change是會形成數據丟失的。由於增量的數據沒法經過觸發器去收集。也就是說,在基於主庫的binlog爲row格式的狀況下,從庫的觸發器是不會起做用的。由於主庫自己經過觸發器產生的變動已經寫入binlog同步到從庫。若是從庫的觸發器也生效的話,就會出現重複。ide
總結:在基於主從複製架構下,若是主庫binlog的日誌格式爲row狀況下,pt-online-schema-change工具必須在主庫執行才能避免主從數據不一致。若是日誌格式是statement的話,則能夠先在從庫執行pt-online-schema-change再在主庫執行。可是目前官方也建議參數binlog_format設置爲row,而非statement,以免某些狀況下的主從數據不一致發生。工具