《梁行-GreatSQL社区在数据库数据校验&修复中的探索与实践420-梁行.pdf》由会员分享,可在线阅读,更多相关《梁行-GreatSQL社区在数据库数据校验&修复中的探索与实践420-梁行.pdf(41页珍藏版)》请在三个皮匠报告上搜索。
1、GreatSQL社区在数据库数据校验&修复中的探索与实践梁行GreatSQL社区开源项目负责人单击添加标题目录CONTENTS关于GreatSQL 社区01gt-checksum 特性03gt-checksum 展望04关于gt-checksum 02GreatSQL 社区GreatSQL社区简介GreatSQL 社区愿景GreatSQL 社区GreatSQL社区成立于2021年,是一个MySQL开源数据库社区,由万里数据库发起,致力于通过开放的社区合作,构建国内自主的MySQL版本及开源数据库技术,推动中国开源数据库及应用生态繁荣发展。成为中国广受欢迎的开源数据库社区GreatSQL开源数据
2、库是适用于金融级应用的国内自主MySQL版本,专注于提升MGR可靠性及性能,支持InnoDB并行查询等特性,可以作为MySQL或Percona Server的可选替换,用于线上生产环境,且完全免费并兼容MySQL或Percona Server。GreatSQL社区发展历程GreatSQL社区现状国内活跃的 MySQL 开源社区l 活跃参与者超 2000 人l 活跃的社区微信群l QQ 群l 微信群02获得中国信通院 CAIT 可信开源评测l 通过可信开源项目评测l 加入可信开源共同体成员l 银河TWOS成员l 科技制造开源社区成员03加入openEuler 生态l 首个加入openEuler
3、生态的MySQL 系国产开源数据库l openEuler22.09 版本正式合入 GreatSQL04社区主要项目l GreatSQL 开源数据库l gt-checksum 数据校验&修复工具01社区用户GreatSQL 社区从上线初期就收获了社区用户的高度关注,短时间内就聚集了上千位专业 DBA 的粉丝群体,以及有几十位社区企业用户,如:恒生电子旗下的芸擎网络科技 深圳华润 靠谱云 中信建投 福建福富 作业帮 建信金科 直真科技 通达信 力维智联单击添加标题目录CONTENTSgt-checksum 关于GreatSQL 社区01gt-checksum 特性03gt-checksum 展望0
4、4关于gt-checksum 02DBA的苦恼?-大数据量主从恢复操作运维replication:34TB的主从实例做恢复操作运维mgr:mgr集群因大事务或网卡导致节点崩溃,进行恢复-物理资源限制恢复节点:传输备份文件受网络带宽限速限制恢复节点:备份数据时受磁盘容量影响导致无法备份受网络、磁盘、cpu、内存限制-重复性工作统计全库所有表的行数(数据稽核)统计全库所有表的结构信息(迁移、主从等)寻找主从库数据是否存在差异因数据类型转换错误导致数据的重复迁移(一个表多个小时)DBA的苦恼?-数据迁移稽核数据割接的稽核工作(load data+vimdiff)稽核效率慢,数据动态变化,变更窗口时间
5、短-业务割接遗漏割接:遗漏存储过程、函数、触发器等迁移变更:变更步骤遗漏(表结构变更+数据迁移)oracle date-mysql date导致数据被截取-迁移工具bug字段截取、乱码、数据类型错转等-待机时间长割接、上线、数据变更等熬夜时间长-背锅侠迁移工具类型转换:产生数据误差(例如:number-dicimal(65,30))场景苦恼?-数据的快速抽取不影响业务的情况下,做数据归档或抽取分析-异地灾备灾备机房下的实例或集群的数据定期检测-上下云场景迁移工具、数据类型、字符集导致的数据被恶意串改、缺失、截取(乱码、字符缺失等)-异构迁移场景因数据类型转换、数据类型长度、字符集等导致的数据被
6、串改、缺失、截取-定期巡检场景保证数据冗余的正确性,防止ha切换导致程序查询数据异常情况苦恼良方!脚本化处理优点灵活,自定义检测内容可控,可以自行修改代码规范,减少低级错误或人为错误产生运维简单,上手容易脚本化处理不足效率低支持场景少,校验表结构可以,数据量困难,异构场景支持难度大面向数据库零侵入性的数据校验source DBdest DBOMMO双向校验表结构校验表数据校验数据校验方案数据校验方案结构一致性校验校验工具应该具备的特质完善数据一致性校验差异数据快速定位修复语句生成及快速应用能力校验速度要够快对数据库零侵入对数据库性能影响可控按字符进行比对,检测细微差异支持异构校验增量数据校验多
7、次校验加速数据校验方案-调研-pt-table-checksum调研不支持异构数据库校验不支持表结构校验数据库侵入性较大(需要建表)不支持增量数据校验校验效率低(单表校验,无法进行表并发)不支持无索引表校验对数据库造成一定压力(在数据库端做crc32校验)环境受限-强依赖主从环境不支持差异数据的快速定位不支持多次校验加速不支持自动应用修复语句crc32校验存在一定的误差数据校验方案-自主-功能功能丰富,满足多种使用场景-性能通过go的协程并发及阻塞队列来实现快速校验-使用成本跨平台编译可执行文件,极简配置运行,无依赖-生态情况社区开源,代码可见,可改-活跃的定期更新修复bug,issues回复
8、及时单击添加标题目录CONTENTSgt-checksum 特性关于GreatSQL 社区01gt-checksum 特性03gt-checksum 展望04关于gt-checksum 02 rows sample count datafixstructdataindexmiss index特性列表struct check-check struct objectis nullcolumn seqdate typedefault valuecharactercollationcomment-FunctioncheckMod loose|strictcheckOrder yes|no-dataFi
9、x SQLcheckFixRule src|dstMO源、目数据源获取表的元数据信息并生成映射表diff 结构比对映射表:column namecolumn seq.struct check-ParametercheckObject-ScenesMany tablesheterogeneous migrationOut of orderindex check-check struct objectindex nameindex column sliceignore primary key name-Functiondiff index-dataFix SQLgeneral datafix sq
10、lMO源、目数据源获取表的元数据信息并生成映射表比对index name及column slice映射表:index namecolumn slice.index check-ParametercheckObject-ScenesMany tablesheterogeneous migrationmiss index:slow sqlonline ddl:slave miss indexpartition check-check struct objectpartition table-Functiondiff partition name/struct-ParametercheckObjec
11、t-ScenesMany tablespartition table-normal tableproc/func check-check struct objectproc|func-Functiondiff proc|func name/struct-ParametercheckObject-ScenesMany tablesmiss proc/functrigger check-check struct objecttrigger-Functiondiff trigger name/struct-ParametercheckObject-ScenesMany tablesmiss trig
12、gerforeign check-check struct objectforeign-Functiondiff foreign name/struct-ParametercheckObject-ScenesMany tablesmiss foreigncount check-check struct objectindex table rows numbermiss index table rows number-Functionmiss index table:select count(1)from xxx;index table:select choose_index_columnfro
13、m xxx where choose_index_column xx and xx and=xxx;-dataFix SQLdiff table rows chan dataMO源、目数据源执行sql语句查询表数据块任务发起及输出无索引并发分段执行索引列选择MD5差异DROPnoadd|deldataFixapplyrows data check-ParametercheckNoIndexTableparallel-thdschanRowCountcheckModcheckObject-ScenesMany tablesBig tablesefficiencymiss index tabled
14、ata consistency requirementsrows data check status monitorarm 128C_512G_ssdrows sample checksum-check struct objectindex table rows datamiss index table rows data-Function1)count check2)query sql*ratio3)rows checkMO源、目数据源执行sql语句查询表数据块任务发起及输出count checksql filterrows checkrows sample check-Parameterc
15、heckNoIndexTableparallel-thdschanRowCountcheckModcheckObjectratio-ScenesMany tablesBig tablesefficiencymiss index tableno data consistency requirementsrows sample单击添加标题目录CONTENTSgt-checksum 展望关于GreatSQL 社区01gt-checksum 特性03gt-checksum 展望04关于gt-checksum 02gt-checksum 展望功能多样性校验速率输出多 样性逻辑优化功能完善1)增加断点续校
16、功能支持多次校验的快速校验2)增加指定条件的数据校验支持单表指定条件的数据块数据校验3)增加表结构校验灵活性支持同构及异构数据库指定、忽略单个或多个列校验支持同构及异构数据库指定、忽略单个或多个列属性的校验(数据类型、默认值、字符集等)4)增加校验结果输出多样支持csv、文本、pdf格式5)增加增量数据校验性能提速1)优化大表count校验速率(有、无索引,同、异构)算法选择合适索引多线程并发count分段数据,数值累加2)优化大表数据校验的校验速率(有、无索引,同、异构)查询条件由单线程变为多线程多线程并发查询分段数据3)优化数据库查询逻辑,降低交互延迟去除group by操作指定条件扫描索
17、引列降低分页查询成本性能提速4)优化查询条件生成算法(包含有索引、无索引)去除递归函数单线程改为多线程脱离部分数据库交互,并发读取ibd文件内容(同构下)查询条件固化,提升多次校验的校验速度(一般用于修复后的二次校验)5)优化加锁行为、构建无锁并发参考单例设计模式,开发mq订阅框架抽离代码完成方法解耦实时检测队列任务状态。弹性扩缩队列长度,减少队列阻塞性能提速6)优化元数据处理将单线程变为多线程,提升速率(校验的表数据过大时,元数据处理也会耗时过长)7)优化增量数据校验速率去除单线程带来的性能瓶颈参考并行复制来提升增量数据的校验速率8)优化物理资源占用使用指针传递减少值拷贝所带来的冗余内存消耗及时回收空闲协程来减少cpu的资源消耗尽少使用磁盘,较少磁盘io带来的性能影响限速网络退化为本地校验请关注 GreatSQL 社区社区官网社区公众号THANKS