关于数据校验:技术分享-使用-syncdiffinspector-对两个-MySQL-进行数据校验

作者:沈光宇 爱可生南区 DBA 团队成员,次要负责 MySQL 故障解决和性能优化。对技术执着,为客户负责。 本文起源:原创投稿 *爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。 一、sync-diff-inspector简介sync-diff-inspector 是由 PingCAP 开源的数据校验工具,用于校验MySQL/TiDB中两份数据是否统一。 次要性能如下: 比照表构造和数据如果数据不统一,则生成用于修复数据的 SQL 语句反对不同库名或表名的数据校验反对分库分表场景下的数据校验反对 TiDB 主从集群的数据校验反对从 TiDB DM 拉取配置的数据校验sync-diff-inspector 的应用限度 对于 MySQL 和 TiDB 之间的数据同步不反对在线校验,须要保障上下游校验的表中没有数据写入,或者保障某个范畴内的数据不再变更,通过配置 range 来校验这个范畴内的数据。FLOAT、DOUBLE 等浮点数类型在 TiDB 和 MySQL 中的实现形式不同,在计算 checksum 时会别离取 6 位和 15 位有效数字。如果不应用该个性,须要设置 ignore-columns 疏忽这些列的查看。反对对不蕴含主键或者惟一索引的表进行校验,然而如果数据不统一,生成的用于修复的 SQL 可能无奈正确修复数据。本文将介绍应用 sync-diff-inspector 工具对两个 MySQL 实例中的数据进行校验,两个 MySQL 实例之间应用 DTS 工具来同步数据。 二、sync-diff-inspector工具下载安装#sync-diff-inspector已集成在TiDB工具包中,间接下载TiDB工具包即可shell> wget https://download.pingcap.org/tidb-community-toolkit-v6.4.0-linux-amd64.tar.gzshell> tar zxvf tidb-community-toolkit-v6.4.0-linux-amd64.tar.gzshell> ls -lh tidb-community-toolkit-v6.4.0-linux-amd64 | grep sync_diff_inspector-rwxr-xr-x 1 tidb tidb 98M Nov 17 11:41 sync_diff_inspectorshell> ./sync_diff_inspector -VApp Name: sync_diff_inspector v2.0Release Version: v6.4.0Git Commit Hash: f7e65073b35538def61ae094cd4a8e57e705344bGit Branch: heads/refs/tags/v6.4.0UTC Build Time: 2022-11-04 07:21:08Go Version: go1.19.2三、sync-diff-inspector工具应用示例1.配置文件通用局部 ...

March 2, 2023 · 5 min · jiezi

关于数据校验:4-Validator校验器的五大核心组件一个都不能少

艰难是弹簧,你弱它就强。本文已被 https://www.yourbatman.cn 收录,外面一并有Spring技术栈、MyBatis、JVM、中间件等小而美的专栏供以收费学习。关注公众号【BAT的乌托邦】一一击破,深刻把握,回绝浅尝辄止。 ✍前言你好,我是YourBatman。 [上篇文章]()介绍了校验器上下文ValidatorContext,晓得它能够对校验器Validator的外围五大组件别离进行定制化设置,那么这些外围组件在校验过程中到底扮演着什么样的角色呢,本文一探到底。 作为外围组件,是有必要多探索一分的。以此为基,再扩散开理解和应用其它功能模块便将蛟龙得水。然而过程干燥是真的,所以须要保持呀。 版本约定Bean Validation版本:2.0.2Hibernate Validator版本:6.1.5.Final✍注释Bean Validation校验器的这五大外围组件通过ValidatorContext能够别离设置:若没设置(或为null),那就回退到应用ValidatorFactory默认的组件。 筹备好的组件,对立通过ValidatorFactory裸露进去予以拜访: public interface ValidatorFactory extends AutoCloseable { ... MessageInterpolator getMessageInterpolator(); TraversableResolver getTraversableResolver(); ConstraintValidatorFactory getConstraintValidatorFactory(); ParameterNameProvider getParameterNameProvider(); @since 2.0 ClockProvider getClockProvider(); ...}MessageInterpolator直译为:音讯插值器。按字面不太好了解:简略的说就是对message内容进行格式化,若有占位符{}或者el表达式${}就执行替换和计算。对于语法错误应该尽量的宽容。 校验失败的音讯模版交给它解决就成为了人能看得懂的音讯格局,因而它可能解决音讯的国际化:音讯的key是同一个,但依据不同的Locale展现不同的音讯模版。最初在替换/技术模版外面的占位符即可~ 这是Bean Validation的标准接口,Hibernate Validator提供了实现:Hibernate Validation它应用的是ResourceBundleMessageInterpolator来既反对参数,也反对EL表达式。外部应用了javax.el.ExpressionFactory这个API来反对EL表达式${}的,形如这样:must be greater than ${inclusive == true ? 'or equal to ' : ''}{value}它是可能动静计算出${inclusive == true ? 'or equal to ' : ''}这部分的值的。 public interface MessageInterpolator { String interpolate(String messageTemplate, Context context); String interpolate(String messageTemplate, Context context, Locale locale);}接口办法直接了当:依据上下文Context填充音讯模版messageTemplate。它的具体工作流程我用图示如下:context上下文里个别是领有须要被替换的key的键值对的,如下图所示:Hibernate对Context的实现中扩大出了如图的两个Map(非JSR规范),能够让你优先于 constraintDescriptor取值,取不到再fallback到规范模式的ConstraintDescriptor里取值,也就是注解的属性值。具体取值代码如下: ...

October 25, 2020 · 2 min · jiezi