簡介:今天咱們來聊聊PT修復工具pt-table-sync
注意事項:
? ?1 表要有主鍵或者唯一鍵
? ?2 針對每一個chunk加的是for update鎖
? ?3 修復過程中不能容忍從庫延遲 如果從庫延遲太多,pt-table-sync會長期持有對chunk的for update鎖,然后等待從庫的master_pos_wait執行完畢或超時。從庫延遲越大,等待過程就越長,主庫加鎖的時間就越長,對線上影響就越大
? ?4 有觸發器和主外鍵約束的情況下要慎用
? ?5 主從數據不一致需要通過replace into來修復,在主庫應用生成binlog,并會應用到所有從庫
? ?6 根據pt-table-checksum的表信息修復的,所以要先校驗后修復
? ?7 pt-table-sync不會同步表結構、索引等,只同步不一致的數據
用戶權限
? ?GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP,SUPER ON db.* TO 'god'@'%' IDENTIFIED BY 'god'//修復的庫
相關參數
? ?–sync-to-master 指定一個DSN,即從的IP,他會通過show processlist或show slave status 去自動的找主。
? ?--unique-checks 唯一鍵檢測
? ?--print 進行打印語句
? ?--execute 真正執行
常用命令范式
? ?pt-table-sync --replicate test.checksums --sync-to-master --unique-checks h=從IP,P=3306,u=god,p=god --print 打印
? ?pt-table-sync --replicate test.checksums --sync-to-master --unique-checks h=從IP,P=3306,u=god,p=god --execute 執行
解決思路
? 1 先用pt-table-checksum校驗一遍,確定不一致的程度:如果不同步的很少,用pt-table-sync直接修復;否則,用備份先替換它,然后用pt-table-sync修復
? 2 在用rsync工具修復的時候最好先print再execute或者手工對從庫執行sql即可
補充
? 針對主從同步發生一些錯誤的場景
? 1 pt-table-checksum 針對發生的表進行校驗,最好采用DSNS
? 2 pt-table-sync 根據第一步的信息進行修改,然后執行sql