my04_Mysql复制数据一致性校验
1. 搭建一套双节点的Mysql主从复制数据库
2. 主库初始化测试数据
drop table if exists test;
create table test ( tid int,tname varchar(12),test_id int NOT NULL AUTO_INCREMENT COMMENT '主键',PRIMARY KEY (test_id)); DROP PROCEDURE IF EXISTS `p_addtest`;
DELIMITER ;;
CREATE DEFINER=`automng`@`10.%` PROCEDURE `p_addtest`(IN n int)
BEGIN
DECLARE i int;
SET i = 0;
WHILE i < n DO
insert into test(tid,tname) values(i,'aaabbb');
set i = i + 1;
END WHILE;
END
;;
DELIMITER ; call p_addtest(20000);
3. 安装 percona-toolkit
wget https://www.percona.com/downloads/percona-toolkit/3.0.11/binary/redhat/7/x86_64/percona-toolkit-3.0.11-1.el7.x86_64.rpm yum localinstall percona-toolkit-3.0.-.el7.x86_64.rpm -y
4. shell命令行执行校验,主库此时无业务数据插入
在哪个数据库服务器上执行没关系,关键是该命令连接的是主库,即host指向的是主库的IP地址,pt-table-checksum命令会自动查找该主库有哪些从库,无须人工干预
automng用户具有ALL PRIVILEGES 权限。
pt-table-checksum --nocheck-binlog-format --recursion-method="processlist" --replicate=vodb.checksums --host=10.168.21.186 --port=3313 -uautomng -pAutomng_123 --databases=vodb
输出结果,注意输出结果正常情况下是没有警告或者错误信息的,如果有,则输出结果可能不准确
Checking if all tables can be checksummed ...
Starting checksum ...
TS ERRORS DIFFS ROWS DIFF_ROWS CHUNKS SKIPPED TIME TABLE
-24T14:: 0.075 vodb.test
重点在于DIFFS列,0表示主从数据一致,非0值表示不一值
5. 从库执行命令校验,主库模拟业务数据
主库模拟业务数据
mysql> call p_addtest(200000);
执行数据库一致校验,可以看到表中的数据一直在增长,但DIFFS的值为一直为0,这表示在使用 pt-table-checksum 命令做数据库一致校验时,无需关心主库是否存在业务
# pt-table-checksum --nocheck-binlog-format --recursion-method="processlist" --replicate=vodb.checksums --host=10.168.21.186 --port= -uautomng -pAutomng_123 --databases=vodb
Checking if all tables can be checksummed ...
Starting checksum ...
TS ERRORS DIFFS ROWS DIFF_ROWS CHUNKS SKIPPED TIME TABLE
-24T14:: 0.203 vodb.test # pt-table-checksum --nocheck-binlog-format --recursion-method="processlist" --replicate=vodb.checksums --host=10.168.21.186 --port= -uautomng -pAutomng_123 --databases=vodb
Checking if all tables can be checksummed ...
Starting checksum ...
TS ERRORS DIFFS ROWS DIFF_ROWS CHUNKS SKIPPED TIME TABLE
-24T14:: 0.581 vodb.test
6. 在从库插入数据使主从数据不一致
mysql> use vodb;Database changed
mysql> desc test;
+---------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+----------------+
| tid | int(11) | YES | | NULL | |
| tname | varchar(12) | YES | | NULL | |
| test_id | int(11) | NO | PRI | NULL | auto_increment |
+---------+-------------+------+-----+---------+----------------+
3 rows in set (0.01 sec) mysql> select max(test_id) from test;
+--------------+
| max(test_id) |
+--------------+
| 220000 |
+--------------+
1 row in set (0.00 sec) mysql> insert into test values(220001,'实打实的手敲代码',220001);
Query OK, 1 row affected (0.03 sec)
查看主从数据一致性
# pt-table-checksum --nocheck-binlog-format --recursion-method="processlist" --replicate=vodb.checksums --host=10.168.21.186 --port= -uautomng -pAutomng_123 --databases=vodb
Checking if all tables can be checksummed ...
Starting checksum ...
TS ERRORS DIFFS ROWS DIFF_ROWS CHUNKS SKIPPED TIME TABLE
-24T14:: 0.605 vodb.test
DIFFS列值不为零,就表示vodb.test这张表数据存在主从不一致的情况
7. pt-table-sync命令可以修改主从数据不一致的情况,但不推荐使用,建议还是手工排查出数据库不一致的原因,以防该现象重复出现,而不是一个命令执行完毕,数据库数据一致了,也不清楚该命令到底做了些什么。
这里不再操作该命令,若有兴趣可参考官方文档进行操作 https://www.percona.com/doc/percona-toolkit/3.0/pt-table-sync.html
8. 手工删除从库不一致数据
mysql> select max(test_id) from test;
+--------------+
| max(test_id) |
+--------------+
| 220001 |
+--------------+
1 row in set (0.00 sec) mysql>
mysql>
mysql> delete from test where test_id=220001;
Query OK, 1 row affected (0.05 sec)
9. 再次验证数据库一致性
# pt-table-checksum --nocheck-binlog-format --recursion-method="processlist" --replicate=vodb.checksums --host=10.168.21.186 --port= -uautomng -pAutomng_123 --databases=vodb
Checking if all tables can be checksummed ...
Starting checksum ...
TS ERRORS DIFFS ROWS DIFF_ROWS CHUNKS SKIPPED TIME TABLE
-24T15:: 0.659 vodb.test
回顾总结
工具的安装不需要在主库上,也不需要在从库上,只需要在一台能够连接到主库的服务器上安装即可
连接用户要具有ALL PRIVILEGES 权限
pt-table-checksum --nocheck-binlog-format --recursion-method="processlist" --replicate=vodb.checksums --host=10.168.21.186 --port=3313 -uautomng -pAutomng_123 --databases=vodb
DIFFS列值为0则数据一致,反之则不一致。
my04_Mysql复制数据一致性校验的更多相关文章
- mysql集群数据一致性校验
目前,mysql在互联网行业使用地如火如荼,很多大型网站都在使用MySQL数据库,通过搭建mysql主备集群,实现高性能,高可用的存储方案.mysql集群的共同特性是通过复制来实现主备间的同步,保证主 ...
- MySQL数据复制的校验
在5.6之前,管理员只能通过ssl实现检校验5.6中,可以使用CRC32检查和来保证master和slave的数据的完整性.校验信息记录在master的二进制日志中和slave的relay日志中. m ...
- 利用pt-table-checksum校验数据一致性
相信很多人的线上都搭建了MySQL主从这样的框架,很多人只监控MySQL的从服务器Slave_IO和Slave_SQL这两个线程是否为YES,还有 Seconds_Behind_Master延迟大不大 ...
- pt-table-checksum校验mysql主从数据一致性
主从数据的一致性校验是个头疼的问题,偶尔被业务投诉主从数据不一致,或者几个从库之间的数据不一致,这会令人沮丧.通常我们仅有一种办法,热备主库,然后替换掉所有的从库.这不仅代价非常大,而且类似治标不治本 ...
- pt工具校验主从数据一致性之dsns方式
mysql主从数据一致性校验,常用的方法是Percona-Toolkit的组件pt-table-checksum,这东西怎么用网上一大堆,就不啰嗦了.主要说一下通过dsns方式发现从库的一种方式. p ...
- mysql数据一致性检查及修复
percona-toolkit-2.2.20-1.noarchmysql 5.6.29-logmaster:192.168.166.129slave:192.168.166.131 一.创建数据库校验 ...
- MySQL高可用之组复制技术(2):配置单主模型的组复制
MySQL组复制系列文章: MySQL组复制大纲 MySQL组复制(1):组复制技术简介 MySQL组复制(2):配置单主模型的组复制 MySQL组复制(3):配置多主模型的组复制 MySQL组复制( ...
- MySQL复制框架
一.复制框架 开始接触复制时,看到各种各样的复制,总想把不同类型对应起来,结果越理越乱~究其原因就是对比了不同维度的属性,不同维度得出的结果集之间必然存在交集,没有必要将不同维度的属性安插到成对的萝卜 ...
- 使用pt-table-checksum校验MySQL主从复制【转】
pt-table-checksum是一个基于MySQL数据库主从架构在线数据一致性校验工具.其工作原理在主库上运行, 通过对同步的表在主从段执行checksum, 从而判断数据是否一致.在校验完毕时, ...
随机推荐
- PDF的一些工具
PdfStreamDumper Pdftk 这里有一个链接,列出了很多pdf免费工具 https://en.wikipedia.org/wiki/Category:Free_PDF_software ...
- RTX这种东西究竟有什么价值?
我在第一家公司工作的时候,同事沟通用的就是RTX,第一感觉就是这么简单的软件也能卖钱? 这种东西有啥价值啊?不就是个没广告蓝色UI的qq吗? 还是那句话,当你已经习惯了一个东西之后,你不会感觉到他的价 ...
- ZROI2018提高day4t3
传送门 分析 我们假设如果一个点是0则它的值为-1,如果一个点是1则值为1,则一个区间的答案便是max(pre[i]+sur[i]),这里的pre[i]表示此区间i点和它之前的的前缀的最大值,sur[ ...
- Django框架 之 模板语言
Django框架 之 模板语言 浏览目录 标签 过滤器 一.标签 Tags 1.普通变量 普通变量用{{ }} 变量名由数字.字母.下划线组成 点.在模板语言中用来获取对象相应的属性值 示例: 1 2 ...
- Person.delete请求----强大的bug---下班之前总结整个过程
默认访问的是: findAll(query) 还有个findAll(ids,query) 只有findAll才调用了findEntity->findById: 那么我重写了findById,查询 ...
- GDB中应该知道的几个调试方法【转陈浩】
七.八年前写过一篇<用GDB调试程序>, 于是,从那以后,很多朋友在MSN上以及给我发邮件询问我关于GDB的问题,一直到今天,还有人在问GDB的相关问题.这么多年来,有一些问题是大家反复 ...
- delphi 调用百度地图WEBSERVICE转换GPS坐标
百度地图的API说明 使用方法 第一步,申请密钥(ak),作为访问服务的依据: 第二步,按照请求参数说明拼写发送http请求的url,注意需使用第一步申请的ak: 第三步,接收返回的数据(json或者 ...
- cross validation
k-folder cross-validation:k个子集,每个子集均做一次测试集,其余的作为训练集.交叉验证重复k次,每次选择一个子集作为测试集,并将k次的平均交叉验证识别正确率作为结果.优点:所 ...
- sql去掉换行符
select replace(replace(ServiceCall,CHAR(13),''),CHAR(10),'') from outbound_complaint where bz1='朱成 ...
- ubuntu - 14.10,安装uget和aria2(下载工具)
Windows下的下载工具--迅雷,之所以下载速度快,乃是它能搜索资源.为己所用,而不是仅仅从原始地址这单一资源处下载. Ubuntu下也有类似的工具,那就是aira2. aira2是一个命令行下载工 ...