MySQL主从同步校验与重新同步
来源:互联网 发布:plc梯形图软件 编辑:程序博客网 时间:2024/05/16 06:38
主从复制环境中,可能有种种原因导致主、从库数据不一致的情况,主从一致性也一直是DBA需要关注的问题,校验MySQL的主从一致性一般有多种工具,诸如MySQL自带的checksum、mysqldiff、pt-table-checksum等,每种工具各有优缺,本文就pt-table-checksum工具进行介绍和记录实验环节。
下载二进制版本的percona-toolkit工具箱
/downloads/percona-toolkit
本文用的是版本
[root@HE3 ~]# tar xvf percona-toolkit-
[root@HE3 ~]# cd percona-toolkit-
[root@HE3 percona-toolkit-]# perl
[root@HE3 percona-toolkit-]# make && make install
主库创建checksums用户用于校验主从是否一致
mysql>GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE ON *.* TO 'checksums'@'%' IDENTIFIED BY 'MANAGER';
开始执行校验,在校验结束后,会在test库下创建表名为checksums的表用于存储主从一致性信息
[root@HE3 ~]#/usr/local/bin/pt-table-checksum h='',u='checksums',p='MANAGER',P=3306 -d www --nocheck-replication-filters --replicate= --no-check-binlog-format
从库可以执行本条SQL来查看哪些表有主从不一致的情况,此时主从是一致的所以没有结果
mysql> SELECT db,tbl, SUM(this_cnt) AS total_rows, COUNT(*) AS chunks FROM WHERE ( master_cnt <> this_cnt OR master_crc <> this_crc OR ISNULL(master_crc) <> ISNULL(this_crc)) GROUP BY db, tbl;Empty set ( sec)
我们先删除www库下的某张表的某一行
[SQL]delete from decorate_order where id=10;受影响的行: 1时间:
再次运行同步校验
[root@HE3 ~]#/usr/local/bin/pt-table-checksum h='',u='checksums',p='MANAGER',P=3306 -d www --nocheck-replication-filters --replicate= --no-check-binlog-format
可以发现在从库上执行本条SQL可以看到主从不一致的表名
mysql> SELECT db,tbl, SUM(this_cnt) AS total_rows, COUNT(*) AS chunks FROM WHERE( master_cnt <> this_cnt OR master_crc <> this_crc OR ISNULL(master_crc) <> ISNULL(this_crc)) GROUP BY db, tbl;+-----+----------------+------------+--------+| db | tbl | total_rows | chunks |+-----+----------------+------------+--------+| www |decorate_order | 25356 | 1 |+-----+----------------+------------+--------+1 row in set ()
同理我们删掉erp库下的某张表的某一行
[SQL]delete from erp_mard id=104;受影响的行: 1时间:
再次运行同步校验
[root@HE3 ~]#/usr/local/bin/pt-table-checksum h='',u='checksums',p='MANAGER',P=3306 -d www --nocheck-replication-filters --replicate= --no-check-binlog-format
可以发现刚刚删除的erp_mard表已经进入到了我们的主从不一致记录表里
mysql> SELECT db,tbl, SUM(this_cnt) AS total_rows, COUNT(*) AS chunks FROM WHERE ( master_cnt <> this_cnt OR master_crc <> this_crc OR ISNULL(master_crc) <> ISNULL(this_crc)) GROUP BY db, tbl;+-----+----------------+------------+--------+| db | tbl | total_rows | chunks |+-----+----------------+------------+--------+| erp |erp_mard | 11183 | 1 || www |decorate_order | 25356 | 1 |+-----+----------------+------------+--------+2 rows in set ()
我们在主库执行pt-table-sync命令来进行重新同步(请做好备份,重要的话说三遍,备份备份备份)
我们先利用print命令,打印出修改的语句但不执行,这里本人推荐用print命令,筛选出需要在不同从库执行的语句,最好不要直接excute执行[root@HE3 ~]#/usr/local/bin/pt-table-sync --print --replicate h='',u='sys_admin',p='MANAGER'本条命令会对主库下所有的从库进行同步[root@HE3 ~]#/usr/local/bin/pt-table-sync --execute --replicate h='',u='sys_admin',p='MANAGER'
同步完后重新验证
[root@HE3 ~]#/usr/local/bin/pt-table-checksum h='',u='checksums',p='MANAGER',P=3306 -d www --nocheck-replication-filters --replicate= --no-check-binlog-format[root@HE3 ~]# /usr/local/bin/pt-table-checksum h='',u='checksums',p='MANAGER',P=3306 -d erp --nocheck-replication-filters --replicate= --no-check-binlog-format
可以发现checksums表已经没有不同步的表了
mysql> SELECT db,tbl, SUM(this_cnt) AS total_rows, COUNT(*) AS chunks FROM WHERE ( master_cnt <> this_cnt OR master_crc <> this_crc OR ISNULL(master_crc) <> ISNULL(this_crc)) GROUP BY db, tbl;Empty set ( sec)
至此主从校验、同步完成
pt-table-checksum,pt-table-sync这两个工具还有很多重要的特性和参数,这里仅做实验用,具体的生产还需要哪些参数,比如只同步某张表等以后会继续深入研究
- MySQL主从同步校验与重新同步
- MySQL主从同步校验与重新同步
- mysql主从,从库需要重新同步
- MySQL主从同步校验工具_pt-table-checksum
- mysql主从同步,双向同步
- MySQL生产库主从重新同步操作注意事项
- MySQL生产库主从重新同步操作注意事项
- windows与centos-mysql主从同步
- Mysql 5.6主从同步配置与解决方案
- Mysql 5.6主从同步配置与解决方案
- Mysql 5.6主从同步配置与解决方案
- mysql 主从同步与主主同步的配置实例
- mysql主从双向同步
- mysql主从同步
- MYSQL主从同步相关
- mysql 主从同步原理
- Mysql 主从数据库同步
- mysql 主从同步原理
- iOS表视图之增删单元格
- 定时器-Vision Timer源码分析
- 2323 Emirp(哈尔滨理工大学)
- function基础
- 博为峰Java技术文章 ——JavaSE Swing BorderLayout布局管理器实例I
- MySQL主从同步校验与重新同步
- Fork/Join框架
- 轮回 第二章 冷傲天
- PHP开发实习生任职要求(58)的总结
- Html与CSS样式——2
- maven项目构建:maven-antrun-plugin插件实现文件内容拷贝和文件重命名
- TimeUnit
- STL笔记之priority_queue 优先级队列
- 轮回 第三章 不祥?