使用pt-table-checksum與pt-table-sync修複mysql主從資料不一致

來源:互聯網
上載者:User

       在MySql主從複製架構的應用中,長時間啟動並執行DB出現各種異常之後,可能會有主備不一致的情況產生,偶爾會在同步時報錯,影響正常的業務訪問。那麼當我們遇到這種主從資料不一致的情況時如何去處理這種狀況,關於mysql的主從資料校正的工具也不少,但是我常用的是percona-toolkit提供的一些工具,順便簡單的做下記錄。


一、關於pt-table-checksum與pt-table-sync?

       pt-table-checksum與pt-table-sync是percona 為mysql DBA 提供一些非常有用的效能診斷工具,此外還有我們經常在備份用到的XtraBackup,用這款基於物理備份工具為mysql的innodb提供熱備、myisam提供溫備。

pt-table-checksum用於校正主從資料的一致性,而pt-table-sync用於同步MySQL表之間的資料,它可以同步單個表,也可以同步整個庫,但是不同步表結構、索引、或任何其他模式對象。


二、安裝percona-toolkit:

       # wget http://www.percona.com/redir/downloads/percona-toolkit/LATEST/deb/percona-toolkit_2.2.6.tar.gz

        # cd ~/

       # zxvf percona-toolkit_2.2.6.tar.gz

       # cd percona-toolkit-2.2.6/

       # perl Makefile.PL

       # make

       # make test

       # make install


三、使用pt-table-checksum檢查資料是否一致在主庫執行):

       使用方法:pt-table-checksum [OPTIONS] [DSN]

       pt-table-checksum:用於校正主從資料的一致性,在主<M>上通過執行校正的查詢對複製的一致性進行檢查,對比主從的校正值,從而產生結果。DSN指向的是主的地址,不制定任何參數,會直接對本地的所有資料庫的表進行檢查。

     

      例如:pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --databases=db_test1 --replicate=db_test1.checksums --host=172.16.5.100 --port=3306 --user=root --password=123456

       

       --nocheck-replication-filters :不檢查複製過濾器,建議啟用。後面可以用--databases來指定需要檢查的資料庫。

       --no-check-binlog-format      :不檢查複製的binlog模式,要是binlog模式是ROW,則會報錯。


       --replicate-check-only          :只顯示不同步的資訊。(注意:要謹慎使用,此參數不會產生新的checksums資料,只會根據checksums表已經有的資料來顯示。)

       --replicate=                           :把checksum的資訊寫入到指定表中,建議直接寫到被檢查的資料庫當中。

       --databases=                         :指定需要被檢查的資料庫,多個則用逗號隔開。

       --tables=                                 :指定需要被檢查的表,多個用逗號隔開

       h=127.0.0.1                           :Master的地址

       u=root                                     :使用者名稱

       p=123456                              :密碼

       P=3306                                  :連接埠


       執行時顯示的結果參數說明:

       TS                   :完成檢查的時間。

       ERRORS       :檢查時候發生錯誤和警告的數量。

       DIFFS             :0表示一致,1表示不一致。當指定--no-replicate-check時,會一直為0,當指定--replicate-check-only會顯示不同的資訊。

       ROWS            :表的行數。

       CHUNKS       :被劃分到表中的塊的數目。

       SKIPPED       :由於錯誤或警告或過大,則跳過塊的數目。

       TIME               :執行的時間。

       TABLE            :被檢查的表名。


四、使用pt-table-sync修複不一致資料:

       使用方法:pt-table-sync [OPTIONS] DSN [DSN]

       pt-table-sync:高效的同步MySQL表之間的資料,他可以做單向和雙向同步的表資料。他可以同步單個表,也可以同步整個庫。它不同步表結構、索引、或任何其他模式對象。所以在修複一致性之前需要保證他們表存在。


       例如:pt-table-sync --replicate=db_test1.checksums --databases=db_test1 --tables=table1,table2,table3,... --charset=utf8 h=127.0.0.1,u=root,p=123456 h=172.16.5.38,u=root,p=123 --print   (建議先列印檢查執行的語句,再複製語句執行或再執行execute)

       

       --replicate=          :指定通過pt-table-checksum得到的表,這2個工具差不多都會一直用。

       --databases=       :指定執行同步的資料庫,多個用逗號隔開。

       --tables=               :指定執行同步的表,多個用逗號隔開。

       --sync-to-master  :指定一個DSN,即從的IP,他會通過show processlist或show slave status 去自動的找主。

       h=127.0.0.1          :伺服器位址,命令裡有2個ip,第一次出現的是M的地址,第2次是Slave的地址。

       u=root                    :帳號。

       p=123456             :密碼。


       --print                    :列印,但不執行命令。

       --execute              :執行命令。



相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.