MySQL主从同步校验与重新同步
主从复制环境中,可能有种种原因导致主、从库数据不一致的情况,主从一致性也一直是DBA需要关注的问题,校验MySQL的主从一致性一般有多种工具,诸如MySQL自带的checksum、mysqldiff、pt-table-checksum等,每种工具各有优缺,本文就pt-table-checksum工具进行介绍和记录实验环节。
下载二进制版本的percona-toolkit工具箱
https://www.percona.com/downloads/percona-toolkit
本文用的是2.2.18版本
[root@HE3~]# tar xvf percona-toolkit-2.2.18.tar.gz
[root@HE3~]# cd percona-toolkit-2.2.18
[root@HE3percona-toolkit-2.2.18]# perl Makefile.PL
[root@HE3 percona-toolkit-2.2.18]# 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='192.168.1.250',u='checksums',p='MANAGER',P=3306 -d www --nocheck-replication-filters --replicate=test.checksums --no-check-binlog-format
从库可以执行本条SQL来查看哪些表有主从不一致的情况,此时主从是一致的所以没有结果
mysql> SELECT db,tbl, SUM(this_cnt) AS total_rows, COUNT(*) AS chunks FROM test.checksums WHERE ( master_cnt <> this_cnt OR master_crc <> this_crc OR ISNULL(master_crc) <> ISNULL(this_crc)) GROUP BY db, tbl;
Empty set (0.03 sec)
我们先删除www库下的某张表的某一行
[SQL]delete from decorate_order where id=10;
受影响的行: 1
时间: 0.003s
再次运行同步校验
[root@HE3 ~]#/usr/local/bin/pt-table-checksum h='192.168.1.250',u='checksums',p='MANAGER',P=3306 -d www --nocheck-replication-filters --replicate=test.checksums --no-check-binlog-format
可以发现在从库上执行本条SQL可以看到主从不一致的表名
mysql> SELECT db,tbl, SUM(this_cnt) AS total_rows, COUNT(*) AS chunks FROM test.checksums 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 (0.00sec)
同理我们删掉erp库下的某张表的某一行
[SQL]delete from erp_mard id=104;
受影响的行: 1
时间: 0.002s
再次运行同步校验
[root@HE3 ~]#/usr/local/bin/pt-table-checksum h='192.168.1.250',u='checksums',p='MANAGER',P=3306 -d www --nocheck-replication-filters --replicate=test.checksums --no-check-binlog-format
可以发现刚刚删除的erp_mard表已经进入到了我们的主从不一致记录表里
mysql> SELECT db,tbl, SUM(this_cnt) AS total_rows, COUNT(*) AS chunks FROM test.checksums 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 (0.02sec)
我们在主库执行pt-table-sync命令来进行重新同步(请做好备份,重要的话说三遍,备份备份备份)
我们先利用print命令,打印出修改的语句但不执行,这里本人推荐用print命令,筛选出需要在不同从库执行的语句,最好不要直接excute执行
[root@HE3 ~]#/usr/local/bin/pt-table-sync --print --replicate test.checksums h='192.168.1.250',u='sys_admin',p='MANAGER' 本条命令会对主库下所有的从库进行同步
[root@HE3 ~]#/usr/local/bin/pt-table-sync --execute --replicate test.checksums h='192.168.1.250',u='sys_admin',p='MANAGER'
同步完后重新验证
[root@HE3 ~]#/usr/local/bin/pt-table-checksum h='192.168.1.250',u='checksums',p='MANAGER',P=3306 -d www --nocheck-replication-filters --replicate=test.checksums --no-check-binlog-format
[root@HE3 ~]# /usr/local/bin/pt-table-checksum h='192.168.1.250',u='checksums',p='MANAGER',P=3306 -d erp --nocheck-replication-filters --replicate=test.checksums --no-check-binlog-format
可以发现checksums表已经没有不同步的表了
mysql> SELECT db,tbl, SUM(this_cnt) AS total_rows, COUNT(*) AS chunks FROM test.checksums WHERE ( master_cnt <> this_cnt OR master_crc <> this_crc OR ISNULL(master_crc) <> ISNULL(this_crc)) GROUP BY db, tbl;
Empty set (0.03 sec)
至此主从校验、同步完成
pt-table-checksum,pt-table-sync这两个工具还有很多重要的特性和参数,这里仅做实验用,具体的生产还需要哪些参数,比如只同步某张表等以后会继续深入研究
本文出自 “岁伏” 博客,请务必保留此出处http://suifu.blog.51cto.com/9167728/1836551
MySQL主从同步校验与重新同步的更多相关文章
- mysql主从一致性校验工具-pt
一.环境 1.系统环境 系统 IP 主机名 说明 server_id centos6.7 MasterIP master 数据库:主 177 centos6.7 SlaveIP slave 数据库: ...
- mysql 主从单库单表同步 binlog-do-db replicate-do-db
方案一:两边做主从. SELECT SUM(DATA_LENGTH)+SUM(INDEX_LENGTH) FROM information_schema.tables WHERE TABLE_SCHE ...
- mysql 主从数据校验
使用工具pt-table-checksum: /usr/bin/pt-table-checksum --user=root --password='mysqlpass' --host=127.0.0. ...
- Mysql 主从一致校验工具------Maatkit工具包
Maatkit工具包 http://www.maatkit.org/ 简介 maatkit是一个开源的工具包,为mysql日常管理提供了帮助.目前,已被Percona公司收购并维护.其中: mk-ta ...
- 监控mysql主从同步状态
在高并发网站架构中,MySQL数据库主从同步是不可或缺的,不过经常会发生由于网络原因或者操作错误,MySQL主从经常会出现不同步的情况,那么如何监控MySQL主从同步,也变成网站正常运行的重要环节. ...
- 使用Percona Toolkit解决Mysql主从不同步问题【备忘】
由于各种原因,mysql主从架构经常会出现数据不一致的情况出现,大致归结为如下几类 1:备库写数据 2:执行non-deterministic query 3:回滚掺杂事务表和非事务表的事务 4:bi ...
- mysql主从同步(3)-percona-toolkit工具(数据一致性监测、延迟监控)使用梳理
转自:http://www.cnblogs.com/kevingrace/p/6261091.html 在mysql工作中接触最多的就是mysql replication mysql在复制方面还是会有 ...
- mysql主从同步详细教程
1.安装好主数据库和从数据库,这个大家肯定都会,如果不是很明白,可以参考我前面的安装教程. 例子: 假如我需要同步test1.test2数据库 系统:centos7 主库主机:192.168.1.25 ...
- mysql 主从master-slave同步复制 配置,为读写分离准备
1.为方便,我在一个windows下安装两个mysql实例,端口分别是 3306.3307 打开 my.ini 或 my-default.ini 文件 配置 basedir datadir 和port ...
随机推荐
- Byte数组和Int的互相转换
public static int bytesToInt(byte[] bytes) { int addr = bytes[0] & 0xFF; addr |= ((bytes[1] < ...
- Go语言实现列出排列组合
今天,隔壁坐的小朋友给我一串数字: 1 6 21 55 让我观察规律,然后帮他推导公式. 尼玛,当我是神呢?!! 想了半天没看出个原委, 于是看了他那边具体需要才发现他那边是对N个数字进行5个数字的组 ...
- PAT (Advanced Level) 1042. Shuffling Machine (20)
简单题. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #in ...
- 给ThinkPHP5增加验证码功能
就在这几天,TP5进行的RC3的大规模更新,虽然我们都狠狠地骂了一百遍,但是我的内心是无比的激动,TP终于走上了"上流社会"的模式:composer! 为什么说composer是上 ...
- python之路:进阶篇 内置函数
li = [11, 22, 33] news = map( li = [100, 2200, 3300] news = map( [13, 24, 35] [11, 11, 11] [22, 4 ...
- Delphi XE7 Update1修正列表
Delphi XE7 Update1修正列表 官方下载地址:http://altd.embarcadero.com/download/radstudio/xe7/delphicbuilder_xe7_ ...
- ajax跨域实现api 接口调用
背景: 想实现跨域去调用接口, 然后同时支持下次调用,能够带cookie信息过来,同时支持来自多个源头的域名的跨域调用. 1.这样支持来自所有域名的跨域调用: 不支持跨域是,浏览器报错: 在api接口 ...
- Unity3d 开发之 ulua 坑的总结
相同的 lua 代码在安卓上能正常运行,但在 IOS 上可能不会正常运行而导致报红,崩溃等,我在使用 lua 编程时遇到的一些坑总结如下: 1. File.ReadAllText, 诸如以下代码在 i ...
- Mysql基本操作整理
1.登录数据库 格式: mysql -h主机地址 -u用户名 -p用户密码 –P端口 –D数据库 –e “SQL 内容”>mysql -uroot -p 数据库名称~~~~~~~~~~~~~~~ ...
- 基于Keepalvied的Mysql主主漂移(切换)
Keepalived实现原理:Keepalived详细介绍简介 实验环境 Master1.Amoeba--IP:192.168.1.5 Master2---IP:192.168.1.10 同时安装ke ...