Mysql

pt-table-checksum 和基於行的複制

  • February 25, 2022

我使用的設置是主從復製配置中的 MySQL 5.5,但我們必須使用“混合”複製(基於語句和行),因為我們使用需要它的應用程序,而且它恰好在我們相同伺服器。

我們最近停止了複製,我想確保我們已經正確恢復。

我下載並安裝了 Percona Toolkit,但在這種情況下我似乎無法使用 pt-table-checksum,特別是因為基於行的複制:

2.27.5 限制使用基於行的複制 pt-table-checksum 的副本需要基於語句的複制,並且它在主伺服器上設置 binlog_format=STATEMENT,但由於 MySQL 的限制,副本不支持此更改。因此,校驗和不會復製過去任何使用基於行的複制的副本,這些複製是進一步副本的主控。該工具會自動檢查所有伺服器上的 binlog_format。看 -

$$ no $$檢查二進制日誌格式。(錯誤 899415)

是否有任何其他選項可以對基於行的複製表進行校驗和?

在 Percona 論壇上發現了這個,它說它起作用,但我不能讓它像它聲稱的那樣改變我的 cnf 文件。當我嘗試執行它時,它還會發出以下警告:

副本 mysql-b.example.com 具有 binlog_format MIXED,這可能導致 pt-table-checksum 中斷複製。請閱讀工具文件的限制部分中的“使用基於行的複制的副本”。如果您了解風險,請指定 –no-check-binlog-format 以禁用此檢查。

我不明白為什麼應用程序需要MIXED複製格式,因為MIXED等於-based,但在執行“不安全”查詢時STATEMENT更改為格式。ROW因此,一個MIXED- 兼容的應用程序應該同時兼容STATEMENTROW

正如您在此處看到的,如果檢測到的格式(伺服器端)是ROWor MIXED,它會嘗試僅為會話動態更改它。在你的情況下,它抱怨這裡的一個奴隸(它需要SUPER特權)。

假設您沒有 3 節點鏈複製,或者您使用從站的 binlog 進行任何操作,您可以忽略帶有--no-check-binlog-format. 無需更改 my.cnf。問題是,僅會話更改語句會影響您的“需要 MIXED 的應用程序”嗎?pt-table-checksum需要將其自己的計算作為語句完成,因為雜湊必須在主伺服器和從伺服器上獨立且同步地獨立計算(不是及時,而是與其他查詢相關)。

引用自:https://dba.stackexchange.com/questions/69891