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

在这里插入图片描述

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 = 3306user = "dba"password = "Dba1qaz@WSX"#对比规则route-rules = ["rule1"][data-sources.tidb]host = "172.21.243.119"port = 4000user = "dba"password = "Dba1qaz@WSX"#对比规则
[routes]
[routes.rule1]
#原库名
schema-pattern = "test"
#目标库名
target-schema = "test"[task]
#对比结果输出目录output-dir = "/tmp/output"#原端标识,对应上面的mysqlsource-instances = ["mysql"]#目标端标识,对应上面的tidbtarget-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.mzph.cn/pingmian/51145.shtml

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

相关文章

3.仓颉编程_没有switch_case需使用match_case

仓颉编程_没有switch_case需使用match_case 支持两种 match 表达式,一种是包含待匹配值的 match 表达式,另一种是不含待匹配值的 match 表达式。 含有匹配值的 match 表达式 main() {let a Hello World!//不可变量var a2 var b 77 //可变变量match(b…

指针!!C语言(第三篇)

目录 一. 二维数组传参的本质 二. 函数指针变量和函数指针数组 三. typedef关键字 四. 转移表 五. 回调函数以及qsort使用举例 一. 二维数组传参的本质 🍟首先我们先回顾一下二维数组是怎样传参的?我们需要传入数组名以及行数和列数,这…

Spring Boot|如何实现 Spring Boot 的优雅停机

文章目录 概述优雅停机的重要性实现优雅停机的方法1. 使用Spring Boot Actuator配置使用 2. 自定义Shutdown Hook示例代码 3. 使用Spring Boot 2.3及更高版本的优雅停机特性配置 4. 通过Spring Cloud Gateway和Ribbon示例配置 5. 定制化停机逻辑示例代码 最佳实践结论 概述 在…

Dhtmlx Gantt教程:创建交互式甘特图的完整指南

在现代的项目管理中,时间是一种宝贵的资源,而甘特图则是一把解锁项目进度的魔法钥匙,想象一下,您可以在一个直观而动态的时间轴上,清晰地看到项目的每一个任务如何交织在一起,如何随着时间的推移展开&#…

【优质精选】12节大模型系列教学课程之二:RAG 原理与应用

课程二:RAG 原理与应用 12节大模型系列教学课程之二:RAG 原理与应用 课程详细内容RAG 技术的基础知识RAG 的工作原理RAG 提高生成质量和准确性的原理RAG 在问答系统中的应用RAG 在文本创作中的应用RAG 在其他领域的应用探索RAG 技术的挑战与应对策略RAG …

代码随想录算法训练营【动态规划篇】

动态规划 注:本文代码来自于代码随想录 509. 斐波那契数 力扣509 Python 动态规划(版本一) class Solution:def fib(self, n: int) -> int:# 排除 Corner Caseif n 0:return 0# 创建 dp table dp [0] * (n 1)# 初始化 dp 数组dp[0]…

LangChain4j-RAG高级-检索增强器

Retrieval Augmentor 检索增强器 RetrievalAugmentor 是 RAG 管道的入口点。它负责使用从各种来源检索的相关 Content 来扩充 ChatMessage 。 可以在创建 AiService 期间指定 RetrievalAugmentor 的实例: Assistant assistant AiServices.builder(Assistant.cla…

探索大型语言模型LLama 2:原理揭秘与代码实践

一、引言 1.1 大型语言模型的重要性 大型语言模型作为人工智能领域的重要研究方向,近年来取得了显著的成果。这些模型在自然语言处理、机器翻译、对话系统、文本生成等领域展现了强大的能力,为人类带来了诸多便利。大型语言模型的出现,使得…

初识git工具~~上传代码到gitee仓库的方法

目录 1.背景~~其安装 2.gitee介绍 2.1新建仓库 2.2进行相关配置 3.拉取仓库 4.服务器操作 4.1克隆操作 4.2查看本地仓库 4.3代码拖到本地仓库 4.4关于git三板斧介绍 4.4.1add操作 4.4.2commit操作 4.4.3push操作 5.一些其他说明 5.1.ignore说明 5.2git log命令 …

ElementPlus轮播图-Vue3

注意:安装时建议使用手机热点,wifi不稳定,会出现执行不成功的现象。 安装 使用包管理器 # 选择一个你喜欢的包管理器# NPM npm install element-plus --save# Yarn yarn add element-plus# pnpm pnpm install element-plus引入配置 完整引…

视频主题Qinmei 3.0视频站源码_WordPress影视视频主题/附详细安装教程

Qinmei 3.0主题主要是将 wordpress 改造成纯 api 的站点,以便实现前后端分离的技术栈,目前的进度已经大致完成,唯一的问题就是需要安装 JWT token 插件。 功能介绍: 支持豆瓣以及 bangumi 的一键获取信息, 豆瓣 api 目前使用的是…

【Node.js基础05】包的理解与使用

一:包的理解与简介 1 什么是包 包是一个将模块、代码、以及其他资料聚合成的文件夹 2 包的分类 项目包:编写项目代码的文件夹 软件包:封装工具和方法供开发者使用 3 为什么要在软件包中编写package.json文件 记录包的清单信息 二&…

NSIS打包脚本第二篇

NSIS打包脚本 NSIS打包脚本第一篇 字符串提取过滤 WordFind 使用方法 ${WordFind} "[string]" "[delimiter]" "[E][options]" $varoption解读 +1和+01一样,代表分割后的第一个字符串 +表示从左往右,-表示从右向左 +2}} 表示从左到右,前2…

Matlab arrayfun 与 bsxfun——提高编程效率的利器!

许多人知道 MATLAB 向量化编程,少用 for 循环 可以提高代码运行效率,但关于代码紧凑化编程, arrayfun 与 bsxfun 两个重要函数却鲜有人能够用好,今天针对这两个函数举例说明其威力。 Matlab arrayfun 概述 arrayfun 是 Matlab …

第五十天 第十一章:图论part01 图论理论基础 深搜理论基础 98. 所有可达路径 广搜理论基础

图论理论基础 了解邻接矩阵(*),度,邻接表(数组链表)等 遍历顺序:深搜加广搜 深搜理论基础 dfs是可一个方向去搜,不到黄河不回头,直到遇到绝境了,搜不下去了&#xff0c…

力扣SQL 最后一个能进入巴士的人 自连接

Problem: 1204. 最后一个能进入巴士的人 文章目录 思路复杂度Code 思路 👨‍🏫 参考题解 复杂度 时间复杂度: O ( ∗ ) O(*) O(∗)空间复杂度: O ( ∗ ) O(*) O(∗) Code select a.person_name from queue a,queue b where a.turn > b.turn -…

Java代理模式详细

Java代理模式详细 一、引言 代理模式(Proxy Pattern)是一种常用的设计模式,它为其他对象提供一种代理以控制对这个对象的访问。在Java中,代理模式可以分为静态代理和动态代理两种。本文将详细介绍代理模式的概念、实现方式以及应…

[极客大挑战 2019]PHP1

打开靶机 提示有备份,可以用工具扫描,我还没有配置好环境,搜了一下其他师傅的:备份的地址在这: /www.zip 下载后得到这几个文件: index.php就是上面打开的网页,其中有一段php代码:…

谷粒商城实战笔记-72-商品服务-API-属性分组-获取分类属性分组

文章目录 一,后端接口开发Controller层修改接口接口测试 二,前端开发 这一节的内容是开发获取分类属性分组的接口。 一,后端接口开发 Controller层修改接口 修改AttrGroupController接口。 RequestMapping("/list/{catelogId}")p…

ROS getting started

文章目录 前言一、认识ROS提供的命令行工具nodestopicsservicesparametersactionsrqt_console, rqt_graph批量启动多个节点recorde and playc基础pub-sub 1.5 ROS2和fastdds1 改变订阅模式2 xml配置3 指定xml位置4 talker/listener通过发现服务器发送topic5 ros2 检视6 远程fas…