D20 - TiDB数据效验

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语法。也可以这样做比较。


<<:  如何避免Overfitting

>>:  Day20 Metricbeat(一)

Simplifying Conditional Logic

本文同步於个人部落格: Simplifying Conditional Logic This art...

食谱搜寻系统_Excel汇入MySQL + CRUD测试

Excel汇入MySQL 首先,MySQL没有办法直接汇入excel档,需要先转成csv档才可以汇入...

【D28】熟练一下厨具-bid and ask #3:制作台指选择权价差单

前言 现在有资料可以制定选择权的价差单,甚至可以用tick提供最即时的价格,进行组合,制作出我们的即...

Day 8 [Python ML、特徵工程] 基准模型(Baseline Model)

前言 今天开始是新的章节,因此也有新的资料集 Kickstarter Projects 在开始之前要...

[D06] OpenCV 介绍与用法

OpenCV 广泛被应用在对目标进行辨识、测量、纪录等,并更进一步的进行影像处理! 读取图片 由於 ...