Mysql
如何確保 pt-sync-table 數據是最新的?
第一步是校驗和差異並記錄到 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"
這種技術的問題是數據庫仍然存在,使其成為一個移動的目標。
從針對實時數據庫伺服器的選項生成的 SQL
由於正在進行實時寫入,因此您必須在以下兩種方法之間做出選擇:
方法#1:先拍攝,然後再提問
如果您選擇在應用程序啟動的情況下執行修復,以下是您的步驟
- 執行 pt-table-sync with
- 查看 repair.sql 並確認更改符合您的預期
- 檢查您的血壓;讓你的藥物待命
--execute
使用選項執行 pt-table-sync方法 #2:應用程序停機時間
- 執行 pt-table-sync with
- 查看 repair.sql 並確認更改符合您的預期
- 檢查您的血壓;讓你的藥物待命
- 停止申請
--execute
使用選項執行 pt-table-sync- 比較 repair.sql 和 repair_after.sql
- 開始申請
結語
對於
APPROACH #2
,如果一切順利,repair_after.sql 應該為空。對於
APPROACH #1
,您將不得不重複您的步驟,直到 repair_after.sql 盡可能接近空。您應該在暫存伺服器上測試這些方法。
您應該始終對數據庫進行備份。
試一試 !!!