- GreatSQL社區原創內容未經授權不得隨意使用,轉載請聯系小編并注明來源,
- GreatSQL是MySQL的國產分支版本,使用上與MySQL一致,
- 作者: GreatSQL社區
- 文章來源:GreatSQL社區原創
-
- 背景介紹
-
- 功能特性
-
- gt-checksum使用
-
- 3.1 標準使用案例
- 3.2 直接在命令列模式下使用
- 3.3 使用極簡組態檔案例
-
- 專案資訊
-
- 開源發布會
不用說,看名字也知道,gt-checksum工具是資料校驗工具,
沒錯,gt-checksum 是GreatSQL社區新增的成員,它是 一款靜態資料庫校驗修復工具,支持MySQL、Oracle等主流資料庫,采用Go語言開發,今天正式開源,
1. 背景介紹
作為MySQL DBA,相信應該都聽說過Percona出品的 pt-table-checksum & pt-table-sync 工具(沒聽說過的絕對不是合格的MySQL DBA,嘿嘿),可以用它倆進行資料校驗及修復作業,非常好用,
不過,在MySQL MGR架構中,或者是當下常見的上云、下云業務中,以及MySQL、Oracle間的異構資料等多種場景中,pt工具并不支持,針對這些需求痛點,我們結合平時遇到的客戶需求,開發了 gt-checksum 資料校驗&修復工具,并貢獻給GreatSQL社區,進行開源,繼續促進業內開源生態健康發展,
gt-checksum工具支持以下幾種常見業務需求場景:
- MySQL主從復制:主從復制中斷后較長時間才發現,且主從間差異的資料量太多,這時候通常基本上只能重建復制從庫,如果利用
pt-table-checksum先校驗主從資料一致性后 ,再利用pt-table-sync工具修復差異資料,這個程序要特別久,時間代價太大, - MySQL MGR組復制:MySQL MGR因故崩潰整個集群報錯退出,或某個節點例外退出,在恢復MGR集群時一般要面臨著先檢查各節點間資料一致性的需求,這時通常為了省事會選 擇其中一個節點作為主節點,其余從節點直接復制資料重建,這個程序要特別久,時間代價大,
- 上云下云業務場景:目前上云下云的業務需求很多,在這個程序中要進行大量的資料遷移及校驗作業,如果出現字符集改變導致特殊資料出現亂碼或其他的情況,如果資料遷 移工具在遷移程序中出現bug或者資料例外而又遷移成功,此時都需要在遷移結束后進行一次資料校驗才放心,
- 異構遷移場景:有時我們會遇到異構資料遷移場景,例如從Oracle遷移到MySQL,通常存在字符集不同,以及資料型別不同等情況,也需要在遷移結束后進行一次資料校驗才 放心,
- 定期校驗場景:作為DBA在維護高可用架構中為了保證主節點出現例外后能夠快速放心切換,就需要保證各節點間的資料一致性,需要定期執行資料校驗作業,
以上這些場景,都可以利用 gt-chcksum 工具來滿足,
2. 功能特性
在正式開源之前,gt-checksum 工具已經在內部經過了十數個版本迭代,可以滿足絕大多數場景下的資料校驗&修復需求,尤其是MySQL、Oracle間的異構資料庫場景,
gt-checksum 工具主要功能特性有:
- 支持主從復制、MGR以及MySQL、Oracle間的資料校驗&修復;
- 資料庫名、表名設定支持多種正則運算式
- 支持多種字符集
- 支持設定表名大小寫敏感
- 支持多種資料校驗模式,資料、表結構、索引、磁區、外鍵、存盤程序等
- 支持多種資料校驗方式,全量校驗,抽樣校驗和行數校驗
- 支持多種資料修復模式,校驗完畢后直接修復或是生成修復SQL檔案再自行手動處理
- 支持校驗無索引表
- 支持并發多執行緒校驗
- 更好支持大表資料校驗,效率更高,且基本不會發生OOM等問題
3. gt-checksum使用
3.1 標準使用案例
指定組態檔,開始執行資料校驗,示例:
shell> gt-checksum -f ./gc.conf
-- gt-checksum init configuration files --
-- gt-checksum init log files --
-- gt-checksum init check parameter --
-- gt-checksum init check table name --
-- gt-checksum init check table column --
-- gt-checksum init check table index column --
-- gt-checksum init source and dest transaction snapshoot conn pool --
-- gt-checksum init cehck table query plan and check data --
begin checkSum index table db1.t1
[████████████████████████████████████████████████████]113% task: 678/600
table db1.t1 checksum complete
** gt-checksum Overview of results **
Check time: 73.81s (Seconds)
Schema Table IndexCol checkMod Rows Differences Datafix
db1 t1 ol_w_id,ol_d_id,ol_o_id,ol_number rows 5995934,5995918 yes file
3.2 直接在命令列模式下使用
設定只校驗db1庫下的所有表,不校驗test庫下的所有表,并設定沒有索引的表也要校驗
shell> gt-checksum -S type=mysql,user=root,passwd=abc123,host=172.16.0.1,port=3306,charset=utf8 -D type=mysql,user=root,passwd=abc123,host=172.16.0.2,port=3306,char
set=utf8 -t db1.* -it test.* -nit yes
3.3 使用極簡組態檔案例
gt-checksum還支持極簡組態檔模式,最少只需要配置三個引數,即可完成資料校驗,例如:
shell> cat gc.conf-simple
[DSNs]
srcDSN = mysql|pcms:abc123@tcp(172.17.16.1:3306)/information_schema?charset=utf8
dstDSN = mysql|pcms:abc123@tcp(172.17.16.2:3306)/information_schema?charset=utf8
[Schema]
tables = db1.t1
shell> gt-checksum -f ./gc.conf-simple
...
注意:
- 極簡組態檔名必須是
gc.conf-simple, - 組態檔中僅需指定源和目標端的DSN,以及要校驗的表名即可,
更多使用場景和案例歡迎大家一起來解鎖,
4. 專案資訊
gt-checksum代碼已上傳到 gitee 上,專案地址 https://gitee.com/GreatSQL/gt-checksum,歡迎圍觀、加星,也歡迎來“找茬”,提patch/issue,
5. gt-checksum正式開源發布會
gt-checksum開源發布會將在 03月06日 19:00-22:30 舉辦 ??
會議鏈接:https://meeting.tencent.com/dw/dXYm49HwVx1g
也可掃描下方二維碼參與:

Enjoy GreatSQL ??
關于 GreatSQL
GreatSQL是由萬里資料庫維護的MySQL分支,專注于提升MGR可靠性及性能,支持InnoDB并行查詢特性,是適用于金融級應用的MySQL分支版本,
相關鏈接: GreatSQL社區 Gitee GitHub Bilibili
GreatSQL社區:
社區博客有獎征稿詳情:https://greatsql.cn/thread-100-1-1.html

技術交流群:
微信:掃碼添加
GreatSQL社區助手微信好友,發送驗證資訊加群,

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/545993.html
標籤:MySQL
上一篇:資料漂移問題及解決方案
