GreatSQL社區原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。 GreatSQL是MySQL的國產分支版本,使用上與MySQL一致。 作者: GreatSQL社區 文章來源:GreatSQL社區原創 背景介紹 功能特性 gt-checksum使用 3.1 標準使用案例 3.2 直接在命 ...
- 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 舉辦