首页 / MYSQL / MySQL 主从数据校验/修复
MySQL 主从数据校验/修复
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL 主从数据校验/修复,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3150字,纯文字阅读大概需要5分钟。
内容图文
主从数据校验
维度:
1个月对现网数据做一次数据校验
如果发生主从切换,当天要做一次数据校验
校验工具:
pt-table-checksum
修复工具:
pt-table-sync
pt-table-checksum
原理
在数据库创建表: checksums
每次取count(*) where id > 0 and id <= 1000 数据(this_cnt),做hash_code运算(this_crc)
主库:select count(*) from tb where id > 0 and id <= 1000;
主从分别执行函数,生成各自的cnt,crc的值
set binlog_format = 'statement'
replace into percona.checksum( db, tb1, chunk, chunk_index, lower_boundary, upper_boundary, this_cnt, this_crc) select xxxxxx
将主库的this_cnt, this_crc值更新到 master_cnt, master_crc 里。
select this_cnt, this_crc from checksum where db = 'xx' and tb = 'xx' and chunk = xx;
update checksum set master_cnt = this_cnt.value, master_crc = this_crc.value where db = 'xx' and tb = 'xx' and chunk = xx;
对比从库的this_cnt, this_crc值 和 master_cnt, master_crc
select db,tb1,sum(this_cnt) as total_rows, count(*) as chunks from checksums where (master_cnt <>this_cnt or master_crc <> this_crc or isnull(master_crc) <> isnull(this_crc)) group by db,tb1;
使用
--recursion-method=hosts: 需要从库配置文件添加从库信息: report_host=172.18.10.198 主库show slave hosts时,才能够找到从库。pt-table-checksum --host=172.18.10.197 --port=3306 --databases=xxxx -uxxxx -p --nocheck-replication-filters --replicate=percona.checksums --nocheck-binlog-format --nocheck-plan --recursion-method=hosts
--nocheck-replication-filters?:不检查复制过滤器,建议启用。后面可以用--databases来指定需要检查的数据库。 --no-check-binlog-format? ? ? :?不检查复制的binlog模式,要是binlog模式是ROW,则会报错。 --replicate-check-only?:只显示不同步的信息。 --replicate=? ?:把checksum的信息写入到指定表中,建议直接写到被检查的数据库当中。? --databases=? ?:指定需要被检查的数据库,多个则用逗号隔开。 --tables=? ? ? :指定需要被检查的表,多个用逗号隔开 h=127.0.0.1? ? :Master的地址 u=root? ? ? ? ?:用户名 p=123456? ? ? ?:密码 P=3306? ? ? ? ?:端口 ? TS? ? ? ? ? ? :完成检查的时间。 ERRORS? ? ? ? :检查时候发生错误和警告的数量。 DIFFS? ? ? ? ?:0表示一致,1表示不一致。当指定--no-replicate-check时,会一直为0,当指定--replicate-check-only会显示不同的信息。 ROWS? ? ? ? ? :表的行数。 CHUNKS? ? ? ? :被划分到表中的块的数目。 SKIPPED? ? ? ?:由于错误或警告或过大,则跳过块的数目。 TIME? ? ? ? ? :执行的时间。 TABLE? ? ? ? ?:被检查的表名。
pt-table-sync
原理
通过pt-table_checksum查到出错的chunk,进行折半查找,找到出错记录。
主库设置
binlog_format='statement'
主库存在,从库不存在。主库执行delete from tb where id = xxx;
主库存在,从库存在,主库replace into ,将记录重新插入一次。从库会将正确数据插入进去。
使用
恢复数据:第一个h是master,第二个h是slave,表必须有主键。先--print查看然后再执行 打印SQL pt-table-sync --charset=utf8 --databases --no-check-slave dsn=u=root,p=root,h=172.18.10.198,P=3306 dsn=u=root,p=root,h=172.18.10.198,P=3307 --print 执行 pt-table-sync --charset=utf8 --databases=db1 --no-check-slave dsn=u=root,p=root,h=172.18.10.198,P=3306 dsn=u=root,p=root,h=172.18.10.198,P=3307 --execute ? --ignore-databases=指定要忽略的库 --databases=指定库 --tables=指定表 ?--print ? 查看执行语句 --execute ?执行 --no-check-slave不检查desitination是否为从库?
内容总结
以上是互联网集市为您收集整理的MySQL 主从数据校验/修复全部内容,希望文章能够帮你解决MySQL 主从数据校验/修复所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。