iT邦幫忙

2021 iThome 鐵人賽

DAY 20
0

sync_diff_inspector是TiDB提供的數據效驗的工具。
可以用來比對TiDB與MySQL中的數據是否一致,也會檢查schema。資料不一致的時候,會產生修復的SQL語法。
但是有個使用上的限制,在執行校驗時,必須保證兩邊是沒有新資料寫入的情況下。
官網提供了執行的範本,可供參考,以下我提供我變更的部分。
首先使用情境是,我只要比對test.tidb_test這張表的資料。

[[check-tables]]
    schema = "test"
    tables = ["tidb_test"]

然後指定我的來源和目標資料庫ip和帳密。

[[source-db]]
    host = "10.102.1.4"
    port = 3306
    user = "tidb_rep"
    password = "不給你看"
    instance-id = "source-1"
# 目标数据库实例的配置
[target-db]
    host = "10.102.1.92"
    port = 4000
    user = "root"
    password = ""

接下來執行sync_diff_inspector

./sync_diff_inspector --config=/root/diff_config.toml

執行後會跑出很長很長很長一串的log...只要看最後一句就知道是否成功。
[2021/09/13 09:20:45.116 +00:00] [INFO] [main.REPLACE INTO `test`.`tidb_test`(`id`,`name`,`age`,`salary`) VALUES (4,'diff_test',99,99999);go:69] ["check pass!!!"]
故意多寫一筆資料讓兩邊資料不一致再跑一次看看
[2021/09/13 09:21:46.195 +00:00] [WARN] [main.go:66] ["check failed!!!"]
檢查出來是失敗的,並且會產生一個fix.sql檔案裡面有記錄怎麼修復的語法

REPLACE INTO `test`.`tidb_test`(`id`,`name`,`age`,`salary`) VALUES (4,'diff_test',99,99999);

除了全表比較以外,也可以設定只比對某個範圍內的資料,例如我只要比較年齡在10到20歲之前的資料,
只要在設定檔定義range="age>=10 and age<=20",range的設定比照SQL語法。也可以這樣做比較。


上一篇
D19 - TiDB Binlog
下一篇
D21 - TiDB監控
系列文
TiDB學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言