pt-table-checksum進行主從資料校驗
前言:mysql的主從配置靈活簡單,有時候太過於靈活了,所以經常會出現主從資料庫不一致的問題,而這種不一致的情況多了或者出現在某個重要的業務場景的時候,mysql的資料的公信力就受到了嚴重的質疑,IT的價值就降低了,如果把這種訊號傳遞給中心的領導,那麼mysql dba的價值也就體現出來了。
主從不一致時的處理方法:通常我們處理主從不一致
主從資料的一致性校驗是個頭疼的問題,偶爾被業務投訴主從資料不一致,或者幾個從庫之間的 資料不一致,這會令人沮喪。通常我們僅有一種辦法,熱備主庫,然後替換掉所有的從庫。這不僅代價非常大,而且類似治標不治本的方案,讓人十分不安。因此我們需要合適的工具,至少幫我們回答下面三個問題:
- 是從庫延遲導致了使用者看到的資料不一致,還是真的主從資料就不一致?
- 如果不一致,這個比例究竟多大?
- 下次還會出現嗎?
回答清楚這幾個問題,有助於我們決定是否修復,以及修復的方式,還可以幫我們找出不一致的資料,進而定位問題根源。而percona的pt-table-checksum正是我們想要的。
Percona在針對mysql的管理方面提供了很多便捷的工具,並整合在percona-toolkit工具包裡,下載網站如下:
在linux中,wget
工具包提供的工具很多:
本文件詳細介紹pt-table-checksum和pt-table-sync這兩個工具的使用;
一、環境說明
1、主資料庫
IP地址:192.168.47.166
主機名:mysql01
同步資料庫名稱:test
2、從資料庫
IP地址:192.168.47.165
主機名:mysql02
現在資料庫的主從狀態是一致的;
二、語法
pt-table-checksum [OPTIONS] [DSN]
[root@mysql02 data]# pt-table-checksum --help Usage: pt-table-checksum [OPTIONS] [DSN]
常用語法說明: --nocheck-replication-filters :不檢查複製過濾器,建議啟用。後面可以用--databases來指定需要檢查的資料庫。 --no-check-binlog-format :不檢查複製的binlog模式,要是binlog模式是ROW,則會報錯。 --replicate-check-only :只顯示不同步的資訊。(注意:要謹慎使用,此引數不會生成新的checksums資料,只會根據checksums表已經有的資料來顯示。) --replicate :把checksum的資訊寫入到指定表中,建議直接寫到被檢查的資料庫當中。 --databases= :指定需要被檢查的資料庫,多個則用逗號隔開。 --tables= :指定需要被檢查的表,多個用逗號隔開 --host=127.0.0.1 :Master的地址 --user=root :使用者名稱 --password=123456 :密碼 --port=3306 :埠 詳細的選項說明: |
三、測試
1、兩邊資料都是一致的情況下,進行pt-table-checksum進行測試
pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --databases=test --replicate=test.checksums --host=192.168.47.167 --port=3306 --user=root --password=123456 TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE
說明: TS :完成檢查的時間。 ERRORS :檢查時候發生錯誤和警告的數量。 DIFFS :0表示一致,1表示不一致。當指定--no-replicate-check時,會一直為0,當指定--replicate-check-only會顯示不同的資訊。 ROWS :被檢查表的行數 CHUNKS :被劃分到表中的塊的數目。 SKIPPED :由於錯誤或警告或過大,則跳過塊的數目。 TIME :執行的時間。 TABLE :被檢查的表名。 |
這邊可以直接顯示兩個表的資料情況,因為我們在進行校驗的時候會寫入到test.checksums表中,所以可以登入到資料庫進行結果的檢查;
mysql> select * from test.checksums; 注:當前主從資料庫的資料都是4條; |
可以看出,當前test資料庫下面的john這個表是一致的。
2、修改從表的資料,使主從資料不一致,方法:在從庫上面增加一條記錄
然後進行主從資料庫的校驗
[root@mysql01 ~]# pt-table-checksum --nocheck-replication-filters --replicate=test.checksums --databases=test h=192.168.47.167,u=root,p=123456 |
DIFFS:1 表示當前主從資料庫已經不一致;
登入主資料庫檢視test.checksums表的記錄:主資料庫顯示this_cnt:4,master_cnt=4,這條記錄顯示的是:當前庫表的記錄資訊和主庫的記錄資訊,因為兩個庫是同一個庫,所以這裡顯示的cnt值都是一樣的;
登入到從庫檢視test.checksums表的記錄,從庫顯示的john表中,this_cnt和master_cnt值是不一致的;
總結:一般進行主從校驗的時候往往不是一兩個表的核對,一個正常的業務的資料庫包含的表個數一般超過100個,根據判斷的情況可以直接對this_cnt和master_cnt進行比對;
指令碼如下:select db,tbl,chunk,this_crc,this_cnt,master_crc,master_cnt,ts from checksums where this_cnt<>master_cnt ;
整個校驗的過程從技術上來講是很簡單的,但是所帶來的業務價值卻是很高的。而DBA人員怎麼把這個過程創造出來的業務價值體現出來,這是比技術更值得去深思的;
....................................................................................................................................................................
本文作者:JOHN,某上市公司DBA,業餘時間專注於資料庫的技術管理,從管理的角度去運用技術。
ORACLE技術部落格:ORACLE 獵人筆記 資料庫技術群:367875324 (請備註ORACLE管理 )
.....................................................................................................................................................................
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29819001/viewspace-1464123/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【Mysql】主從不同的埠使用pt-table-checksum校驗一致性MySql
- pt-table-checksum校驗主從一致性,使用pt-table-sync修復資料不一致
- 行式填報 資料校驗 --- 小計校驗
- 前端資料校驗從建模開始前端
- 資料校驗
- MySQL手動資料校驗+雲資料庫資料校驗MySql資料庫
- MySQL主從同步校驗與重新同步薦MySql主從同步
- easypoi資料校驗
- [資料校驗/資料質量] 資料校驗框架(Java):hibernate-validation框架Java
- ORACLE資料校驗文件Oracle
- 在ossphpsdk進行crc64校驗PHP
- 技術分享 | 使用 sync_diff_inspector 對兩個 MySQL 進行資料校驗MySql
- Binding(四):資料校驗
- struts2資料校驗
- 使用 voluptuous 校驗資料
- DW中的資料校驗
- 前端資料校驗後,後端介面是否需要再次校驗?前端後端
- 改進你的資料校驗 -- Value Object Validate 模式 (轉)Object模式
- 使用Moya庫,進行https證書校驗HTTP
- Node 在 Controller 層如何進行資料校驗Controller
- Hibernate資料校驗簡介
- 科學甩鍋技術: Typescript 執行時資料校驗TypeScript
- MYSQL資料庫主從同步(一主一從)MySql資料庫主從同步
- vxe-table 校驗,根據行屬性校驗
- MySQL 資料主從同步MySql主從同步
- JSR303 資料校驗JS
- 【mysql】mysql的資料庫主從(一主一從)MySql資料庫
- MySQL-主從複製之同步主從資料MySql
- mysql主從中,從和主資料相差較多MySql
- XtraBackup線上進行MySQL的主從部署一MySql
- SpringBoot如何優雅的進行引數校驗Spring Boot
- PHP 對資料進行驗證和過濾PHP
- AntD框架上傳檔案前校驗資訊:選擇檔案前進行內容校驗並提示框架
- PHP學習筆記(七):前臺使用者登陸、後臺匹配資料庫進行校驗PHP筆記資料庫
- 前端與後端TP的資料校驗前端後端
- .NET中特性+反射 實現資料校驗反射
- openGauss-資料校驗gs_datacheck
- 資料庫主從複製資料庫