TiDB-从0到1-sync-diff-inspector数据校验工具

news2024/11/20 15:33:36

在这里插入图片描述

TiDB从0到1系列

  • TiDB-从0到1-体系结构
  • TiDB-从0到1-分布式存储
  • TiDB-从0到1-分布式事务
  • TiDB-从0到1-MVCC
  • TiDB-从0到1-部署篇
  • TiDB-从0到1-配置篇
  • TiDB-从0到1-集群扩缩容
  • TiDB-从0到1-数据导出导入
  • TiDB-从0到1-BR工具

一、sync-diff-inspector工具

sync-diff-inspector是TiDB原生的数据对比工具,可以对比表与表的结构\数据差异
支持MySQL - MySQL、MySQL - TiDB的两两组合,其工具被开发出来主要的意义也是为了大家将数据从MySQL迁移
到TiDB后可以做校验。

sync-diff-inspector实现逻辑:
通过checksum,根据表结构表数据通过算法得到一个类MD5值然后进行比较。
如果整体扫描后checksum不同,则将checksum一分为二(二分法)再次比较,以此类推,当范围足够小时就对数据进行逐行对比
最终生成FIX SQL(修复SQL)
同时每10s生成一个checkpoint,用于断点后继续比较

需要权限
上下游:select show_databases reload

二、sync-diff-inspector使用限制

  • 不支持json bit binary blob等类型的数据对比
  • 如果是TiDB和mysql之间进行校验,Float,double等浮点数类型无法对比(因为底层排序规则逻辑不通,对比时会有差异)
  • 没有主键或唯一键的表可以校验,但是无法正确生成修复sql
  • 当数据正在同步时不支持数据在线校验

三、sync-diff-inspector操作

1、下载安装

wget https://download.pingcap.org/tidb-community-toolkit-v7.5.1-linux-amd64.tar.gz
------
tar -xvf tidb-community-toolkit-v7.5.1-linux-amd64.tar.gz

2、解压后在工具包就可看到
在这里插入图片描述

3、创建对比的配置文件

vim sync_diff_config.toml
--------------------------------
#对比时的线程数
check-thread-count=4
#是否输出修复语句
export-fix-sql=true
#true只查表结构,false检查表结构和数据
check-struct-only=false

#数据源
[data-sources]
[data-sources.mysql]
  host = "172.21.243.119"
  port = 3306
  user = "dba"
  password = "Dba1qaz@WSX"
  #对比规则
  route-rules = ["rule1"]

[data-sources.tidb]
  host = "172.21.243.119"
  port = 4000
  user = "dba"
  password = "Dba1qaz@WSX"

#对比规则
[routes]
[routes.rule1]
#原库名
schema-pattern = "test"
#目标库名
target-schema = "test"

[task]
#对比结果输出目录
  output-dir = "/tmp/output"
  #原端标识,对应上面的mysql
  source-instances = ["mysql"]
  #目标端标识,对应上面的tidb
  target-instance = "tidb"
  #对比哪些表
  target-check-tables = ["test.*"]

4、执行对比

./sync_diff_inspector --config=/opt/sync_diff_config.tom

在这里插入图片描述在这里插入图片描述

5、查看对比结果
在这里插入图片描述

  • checkpoint:检查点
  • fix-on-b:修复语句(需在目标端执行)
  • summary.txt:对比内容记录
  • sync_diff.log:对比日志

6、SQL修复内容

  • 下游数据库缺失行,生成replace语句
  • 下游数据库冗余,生成delete语句
  • 下游数据库行部分数据不一致,则是replace语句,但会在SQL文件中通过注释的方法标明不同的列

7、执行修复SQL后再验证
在这里插入图片描述
在这里插入图片描述

8、操作注意事项

  • 避免在业务高峰期
  • 建议比对前先收集表的统计信息
  • sql修复数据前需先确认
  • sync-diff-inspector默认开启sharding校验,(如果不是比对分片数据,sharding需要设置为false)
  • 如果表的主键或唯一键为varchar类型,需要在sync-diff-inspector的配置文件中增加collation配置(目的是为了保证check排序校验是顺序一致) collation=utf83
  • 生成的修复SQL是单行的,差异较大时修复速度过慢

彩蛋

TiDB相较于其他数据库的一大优势就是工作中常用的组件都有原生工具,并且大多数都遵循Apache License 2.0开源协议。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1954761.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第六十二章 定时器按键消抖实验

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

详解Mysql InnoDB引擎 04

文章目录 1. InnoDB 简介2. 逻辑存储结构2.1 表空间 idb文件2.2 段2.3 区 1M2.4 页 16KB2.5 行 3. 架构3.1 内存结构3.1.1 Buffer Pool 缓冲池3.1.2 Change Buffer 更改缓冲区3.1.3 Adaptive Hash Index3.1.4 Log Buffer 3.2 磁盘结构 4. 后台线程5. 事务原理5.1 redo log 重做…

Pytorch深度学习实践(9)卷积神经网络

卷积神经网络 全连接神经网络 神经网络中全部是线性模型,是由线性模型串联起来的 全连接网络又叫全连接层 卷积神经网络 在全连接神经网络中,由于输入必须是一维向量,因此在处理图像时必须要对图像矩阵进行拉伸成一维的形式,…

视觉巡线小车(STM32+OpenMV)——总结

文章目录 目录 文章目录 前言 一、效果展示 二、完整流程 1、STM32CubeMX配置 2、Keil编辑 3、硬件接线 4、参数调试 5、图像处理调试 三、总结 前言 基于前面的系列文章,已基本介绍完了基于STM32OpenMV的视觉巡线小车,本文将以小编自己的小车…

BACnet物联网关BL103:Modbus协议转BACnet/MSTP

随着物联网技术在楼宇自动化与暖通控制系统中的迅猛发展,构建一种既经济高效又高度可靠的协议转换物联网关成为了不可或缺的核心硬件组件。在此背景下,我们钡铼特别推荐一款主流的BAS(楼宇自动化系统)与BACnet物联网关——BL103&a…

小世界特性解析——聚类系数与平均路径长度的奥秘

小世界特性解析——聚类系数与平均路径长度的奥秘 小世界特性的核心衡量指标 小世界特性,这一复杂网络中的重要概念,主要通过两个关键指标来衡量:聚类系数和平均路径长度。这两个指标共同揭示了网络结构的紧密程度和信息传播的效率。 聚类…

echarts没数据的时候,页面显示暂无数据

echarts没数据的时候,页面显示暂无数据 给个if判断 let option{} if(data.length0){ //没有数据或者数据不合法,显示暂无数据option {title: {text: 暂无数据,x: center,y: center,textStyle: {fontFamily: Manteka,fontSize: 12,fontWeight: normal,color: #333…

使用 Copilot 对 OneDrive 文档分享进行摘要

对于大量使用onedrive进行资料分享的用户而言,对分享的文件进行简要说明并提供给对方,是一个基本素养。 在以往,他们只能阅读文件名然后靠回忆进行撰写,或者打开每一个文档通读全文然后再关闭返回并撰写摘要。 当用户在 SharePo…

Java聚合快递小程序对接云洋系统程序app源码

​一场物流效率的革命 引言:物流新时代的序章 在数字化浪潮席卷各行各业的今天,物流行业也迎来了前所未有的变革。为了进一步提升物流效率,优化用户体验,聚合快递系统与云洋系统小程序的对接成为了行业内外关注的焦点。这一创新…

基于JSP的毕业生就业信息管理系统

你好,我是专注于信息系统开发的码农小野!如果你对毕业生就业信息管理有需求,欢迎联系我。 开发语言:JSP 数据库:MySQL 技术:JSP技术 SSM框架 工具:Eclipse、Maven、Navicat 系统展示 首页…

登录案例(JAVA)

练习1 package lx2;import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.Scanner;public class demo1 {/*需求:写一个登陆小案例。步骤…

Hive环境搭建(内置数据库)

实验目的】 1) 了解hive的作用 2) 熟练hive的配置过程(内置数据库) 【实验原理】 Hive的架构是由Client、Metastore、Driver、Compiler构成,执行流程是编译器可以将一个Hive QL转换成操作符,操作符是Hive中的最小处理单元。…

【BUG】已解决:UnicodeDecodeError: ‘utf-8’ codec can’t decode bytes in position 10

UnicodeDecodeError: ‘utf-8’ codec can’t decode bytes in position 10 目录 UnicodeDecodeError: ‘utf-8’ codec can’t decode bytes in position 10 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#x…

torch fbgemm.dll 报错

这里写自定义目录标题 OSError: [WinError 126] The specified module could not be found. Error loading \"c:\\Users\\Noor\\anaconda3\\envs\\DL\\Lib\\site-packages\\torch\\lib\\fbgemm.dll\" or one of its dependencies."https://github.com/lucasg/De…

在VMware创建Ubuntu24

目录 一、创建虚拟机 1. 自定义创建虚拟机 2. 设置虚拟机兼容 3. 选择镜像 4. 命名虚拟机,选择存放位置 5. 处理器配置 6. 内存配置 7. 网络类型配置 8. I/O控制器类型 9. 磁盘配置 10. 完成虚拟机创建 二、Ubuntu安装 1. 进入虚拟机中进行ubuntu的安…

java算法day25

java算法day25 广度优先搜索岛屿数量深搜岛屿数量广搜 广度优先搜索 核心:从起点出发,以起始点为中心一圈一圈进行搜索,一旦遇到终点,记录之前走过的节点就是一条最短路。搜索的方式是上下左右 一张图说明白模拟过程&#xff1…

21.发布确认模式-高级

问题 生产环境中由于一些不明原因,导致rabbitmq重启,在重启的期间生产者消息投递失败,导致消息丢失,需要手动处理恢复。那么如何才能进行rabbitmq的消息可靠性投递?特别是在极端的情况,rabbitmq集群不可用…

从json到protobuf,接口效率的提升

在express开发的前后端调用中,express作为服务端是不二之选,它有一些很好用的body解析器来解析传入数据;而作为请求发起方,axios是非常方便的,这是一个很好的选择,它可以传输多种类型的数据给接收方。 通常…

ios生成打包证书和描述文件(保姆级)

苹果开发者地址:Apple Developer (简体中文) 1.申请苹果App ID(App的唯一标识) 选择App IDs 选择App 输入APP ID的描述和Bundle ID Explicit:唯一的ID,用于唯一标识一个应用程序,一般选Explicit WildCard:通配符ID&am…

【初阶数据结构篇】顺序表和链表算法题

文章目录 顺序表算法题移除元素删除有序数组中的重复项合并两个有序数组 链表算法题移除链表元素反转链表链表的中间结点合并两个有序链表链表分割链表的回文结构 顺序表算法题 不熟悉顺序表的可以先了解一下 顺序表实现方法 移除元素 给你一个数组 nums 和一个值 val&#x…