好用的資料校驗&修復工具gt-checksum開源啦

語言: CN / TW / HK
  • GreatSQL社群原創內容未經授權不得隨意使用,轉載請聯絡小編並註明來源。
  • GreatSQL是MySQL的國產分支版本,使用上與MySQL一致。
  • 作者: GreatSQL社群
  • 文章來源:GreatSQL社群原創

    1. 背景介紹
    1. 功能特性
    1. gt-checksum使用
    • 3.1 標準使用案例
    • 3.2 直接在命令列模式下使用
    • 3.3 使用極簡配置檔案案例
    1. 專案資訊
    1. 開源釋出會

不用說,看名字也知道,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工具支援以下幾種常見業務需求場景:

  1. MySQL主從複製:主從複製中斷後較長時間才發現,且主從間差異的資料量太多,這時候通常基本上只能重建複製從庫,如果利用 pt-table-checksum 先校驗主從資料一致性後 ,再利用 pt-table-sync 工具修復差異資料,這個過程要特別久,時間代價太大。
  2. MySQL MGR組複製:MySQL MGR因故崩潰整個叢集報錯退出,或某個節點異常退出,在恢復MGR叢集時一般要面臨著先檢查各節點間資料一致性的需求,這時通常為了省事會選 擇其中一個節點作為主節點,其餘從節點直接複製資料重建,這個過程要特別久,時間代價大。
  3. 上雲下雲業務場景:目前上雲下雲的業務需求很多,在這個過程中要進行大量的資料遷移及校驗工作,如果出現字符集改變導致特殊資料出現亂碼或其他的情況,如果資料遷 移工具在遷移過程中出現bug或者資料異常而又遷移成功,此時都需要在遷移結束後進行一次資料校驗才放心。
  4. 異構遷移場景:有時我們會遇到異構資料遷移場景,例如從Oracle遷移到MySQL,通常存在字符集不同,以及資料型別不同等情況,也需要在遷移結束後進行一次資料校驗才 放心。
  5. 定期校驗場景:作為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
...

注意

  1. 極簡配置檔名必須是 gc.conf-simple
  2. 配置檔案中僅需指定源和目標端的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