Mysql

如何確保 pt-sync-table 數據是最新的?

  • March 27, 2022

第一步是校驗和差異並記錄到 percona.checksum 表中

pt-table-checksum h=xx,P=xx,u=xx,p=xx method=dsn=h=xx,D=xx,t=xx --databases=kobe

第二步,將修復SQL列印到文件中

pt-table-sync --print --sync-to-master h=xx,P=xx,u=xx,p=xx >repair.sql

我需要把這個repairsql文件拿給開發人員,告訴他們有多少條記錄有差異,差異細節,讓他們確定。然後我執行修復sql

所以我的問題是我執行這個舊修復SQL,新數據正在插入,新差異正在創建,也許這個舊修復SQL會覆蓋最新數據!

有誰能夠幫我 ?謝謝 !

使用--where選項

只執行匹配此 WHERE 子句的行。您可以使用此選項將校驗和限制為僅表的一部分。如果您有隻附加的表並且不想不斷地重新檢查所有行,這將特別有用;例如,您可以執行一項日常工作來檢查昨天的行。

這個選項很像 mysqldump 的 -w 選項。不要指定 WHERE 關鍵字。您可能需要引用該值。這是一個例子:

pt-table-checksum --where "ts > CURRENT_DATE - INTERVAL 1 DAY"

來源:https ://www.percona.com/doc/percona-toolkit/2.2/pt-table-checksum.html#cmdoption-pt-table-checksum–where

這種技術的問題是數據庫仍然存在,使其成為一個移動的目標。

從針對實時數據庫伺服器的選項生成的 SQL--print更多的是為您提供即將執行的 SQL 的預覽,而不是使用 SQL 腳本。

由於正在進行實時寫入,因此您必須在以下兩種方法之間做出選擇:

方法#1:先拍攝,然後再提問

如果您選擇在應用程序啟動的情況下執行修復,以下是您的步驟

  • 執行 pt-table-sync with --printto repair.sql
  • 查看 repair.sql 並確認更改符合您的預期
  • 檢查您的血壓;讓你的藥物待命
  • --execute使用選項執行 pt-table-sync
  • --print對 repair_after.sql執行 pt-table-sync

方法 #2:應用程序停機時間

  • 執行 pt-table-sync with --printto repair.sql
  • 查看 repair.sql 並確認更改符合您的預期
  • 檢查您的血壓;讓你的藥物待命
  • 停止申請
  • --execute使用選項執行 pt-table-sync
  • --print對 repair_after.sql執行 pt-table-sync
  • 比較 repair.sql 和 repair_after.sql
  • 開始申請

結語

對於APPROACH #2,如果一切順利,repair_after.sql 應該為空。

對於APPROACH #1,您將不得不重複您的步驟,直到 repair_after.sql 盡可能接近空。

您應該在暫存伺服器上測試這些方法。

您應該始終對數據庫進行備份。

試一試 !!!

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