MySQL主从数据一致性问题修复

前面,我们使用pt-table-checksum 可以检测出主从数据是否一致的问题。发现问题后,我们怎么解决这些问题,也是我们必须要会的技能。

修复主从数据一致性问题,我们使用pt-table-sync工具,和pt-table-checksum一样,都需要提前安装percona-tools工具包。怎么安装,我这里就不说了,请看我之前的文章。

下面我们来演示一下主从数据一致性问题修复

1.环境介绍

IP 端口 角色
192.168.199.230 3306 Master
192.168.199.131 3306 Slave

我们这里已经创建好了主从复制环境,这里我就不演示了

2.创建表和数据

我们是在Master实例上创建表和数据

root@localhost:mysql3306.sock [db1]> create table tb_2018 (
-> id int not null auto_increment,
-> cname varchar(32),
-> ctime datetime,
-> primary key(id)
-> );
root@localhost:mysql3306.sock [db1]> insert into tb_2018(cname,ctime) values ('unixfbi',now());
Query OK, 1 row affected (0.00 sec) root@localhost:mysql3306.sock [db1]> insert into tb_2018(cname,ctime) values ('MySQL',now());
Query OK, 1 row affected (0.00 sec) root@localhost:mysql3306.sock [db1]> insert into tb_2018(cname,ctime) values ('JAVA',now());

3.让主从数据不一致

我们在从库上添加一条数据,让主从数据不一致。

oot@localhost [db1]>insert into tb_2018(cname,ctime) values ('NET',now());
Query OK, 1 row affected (0.02 sec)
root@localhost [db1]>select * from tb_2018;
+----+---------+---------------------+
| id | cname | ctime |
+----+---------+---------------------+
| 1 | unixfbi | 2018-01-29 14:43:01 |
| 2 | MySQL | 2018-01-29 14:43:10 |
| 3 | JAVA | 2018-01-29 14:43:19 |
| 4 | NET | 2018-01-29 14:44:15 |
+----+---------+---------------------+
4 rows in set (0.00 sec)

4.验证主从数据是否一致

在Master实例上执行

# pt-table-checksum --nocheck-binlog-format --replicate=db1.checksum   -h localhost -P3306 -u root -p unixfbi --ignore-databases=mysql --recursion-method="processlist"
Checking if all tables can be checksummed ...
Starting checksum ...
TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE
01-29T14:45:30 0 0 44 1 0 0.496 db1.tb1
01-29T14:45:30 0 1 3 1 0 0.015 db1.tb_2018
01-29T14:45:30 0 0 1 1 0 0.264 db2.tb3
01-29T14:45:31 0 0 1 1 0 0.012 db2.tb4
01-29T14:45:31 0 0 6 1 0 0.013 sys.sys_config
01-29T14:45:31 0 0 2 1 0 0.013 wbx3306.t1
01-29T14:45:31 0 0 0 1 0 0.013 wbx3306.tp_1

发现db1.tb_2018这个表里的数据已经不一致了。

5.查看不一致信息

执行pt-table-sync命令之前一定要确保checksum表的存在,也就是说必须先验证数据是否一致,才能执行pt-table-sync命令。

这里我们只是查看并打印解决不一致问题的语句,所以我们这里使用pt-table-sync命令的--print参数。修复不一致的问题,我们需要使用--execute参数。

# pt-table-sync --replicate=db1.checksum  h=192.168.199.230,u=root,p=unixfbi --print
DELETE FROM `db1`.`tb_2018` WHERE `id`='4' LIMIT 1 /*percona-toolkit src_db:db1 src_tbl:tb_2018 src_dsn:h=192.168.199.230,p=...,u=root dst_db:db1 dst_tbl:tb_2018 dst_dsn:h=dev-hd-node3,p=...,u=root lock:1 transaction:1 changing_src:db1.checksum replicate:db1.checksum bidirectional:0 pid:42455 user:ruowei host:db-node1*/;

直接打印出了解决主从数据不一致的语句。

6.修复主从数据不一致问题

这里我们需要使用pt-table-sync命令的--execute参数

# pt-table-sync --replicate=db1.checksum  h=192.168.199.230,u=root,p=unixfbi --execute

执行修复命令后,我们再次检查看看数据是否一致。

# pt-table-checksum --nocheck-binlog-format --replicate=db1.checksum   -h localhost -P3306 -u root -p unixfbi --ignore-databases=mysql --recursion-method="processlist"
Checking if all tables can be checksummed ...
Starting checksum ...
TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE
01-29T15:13:50 0 0 44 1 0 0.016 db1.tb1
01-29T15:13:50 0 0 3 1 0 0.015 db1.tb_2018
01-29T15:13:50 0 0 1 1 0 0.013 db2.tb3
01-29T15:13:50 0 0 1 1 0 0.012 db2.tb4
01-29T15:13:50 0 0 6 1 0 0.012 sys.sys_config
01-29T15:13:50 0 0 2 1 0 0.012 wbx3306.t1
01-29T15:13:50 0 0 0 1 0 0.013 wbx3306.tp_1

发现没有显示数据不一致的问题。

在从库上查看一下数据有什么变化:

root@localhost [db1]>select * from tb_2018;
+----+---------+---------------------+
| id | cname | ctime |
+----+---------+---------------------+
| 1 | unixfbi | 2018-01-29 14:43:01 |
| 2 | MySQL | 2018-01-29 14:43:10 |
| 3 | JAVA | 2018-01-29 14:43:19 |
+----+---------+---------------------+
3 rows in set (0.00 sec)

发现是把id=4的这条数据删除了,保证了和主库数据一致性的。

参考文档

http://blog.itpub.net/12679300/viewspace-1455303/

本文出自 “运维特工” 博客,转载请务必保留原文链接 和 http://www.unixfbi.com

MySQL主从数据一致性问题修复的更多相关文章

  1. mysql主从数据一致性校验和修复

    1. 安装 yum install -y perl-IO-Socket-SSL.noarch perl-Digest-MD5 yum -y install http://www.percona.com ...

  2. 利用mk-table-checksum监测Mysql主从数据一致性操作记录

    前面已经提到了mysql主从环境下数据一致性检查:mysql主从同步(3)-percona-toolkit工具(数据一致性监测.延迟监控)使用梳理今天这里再介绍另一种Mysql数据一致性自动检测工具: ...

  3. 恢复MySQL主从数据一致性的总结

    今日上午,同事告知,MySQL主从数据库的数据不一致,猜测备库在同步过程中出现了问题,于是,登上备库,使用 mysql> show slave status\G查看,果然,备库在insert语句 ...

  4. pt-table-checksum校验mysql主从数据一致性

    主从数据的一致性校验是个头疼的问题,偶尔被业务投诉主从数据不一致,或者几个从库之间的数据不一致,这会令人沮丧.通常我们仅有一种办法,热备主库,然后替换掉所有的从库.这不仅代价非常大,而且类似治标不治本 ...

  5. mysql主从同步(3)-percona-toolkit工具(数据一致性监测、延迟监控)使用梳理

    转自:http://www.cnblogs.com/kevingrace/p/6261091.html 在mysql工作中接触最多的就是mysql replication mysql在复制方面还是会有 ...

  6. mysql主从同步(4)-Slave延迟状态监控

    mysql主从同步(4)-Slave延迟状态监控  转自:http://www.cnblogs.com/kevingrace/p/5685511.html 之前部署了mysql主从同步环境(Mysql ...

  7. pt工具校验主从数据一致性之dsns方式

    mysql主从数据一致性校验,常用的方法是Percona-Toolkit的组件pt-table-checksum,这东西怎么用网上一大堆,就不啰嗦了.主要说一下通过dsns方式发现从库的一种方式. p ...

  8. MySQL主从修复

    MySQL主从故障修复 测试库:192.168.1.2 主192.168.1.3 从 192.168.1.4 主 4又是2的从库192.168.1.5 从 有人修改了192.168.1.2和192.1 ...

  9. shell脚本修复MySQL主从同步

    发布:thebaby   来源:net     [大 中 小] 分享一例shell脚本,用于修改mysql的主从同步问题,有需要的朋友参考下吧. 一个可以修改mysql主从同步的shell脚本. 例子 ...

随机推荐

  1. MVC ---- 理解学习Func用法

    //Func用法 public static class FuncDemo{ public static void TestFunc(){ //数据源 List<User> usList ...

  2. [CentOS_7.4]Linux编译安装mono环境

    一 安装mono 安装过程: 下载mono安装源,配置,编译,安装,设置环境变量. # wget http://download.mono-project.com/sources/mono/mono- ...

  3. Qt_QString::split测试

    1. #define GID_PREFIX "dr_" QString str = "dr__awedr4"; QString str1; QStringLis ...

  4. HDU 6098 Inversion

    Inversion 思路:从大到小排序后,每次找到第一个下标不整出i的输出. 代码: #include<bits/stdc++.h> using namespace std; #defin ...

  5. java 路径分隔符File.separator 以及 路径两种写法"/"和"\\"

    一.File.separator File file=new File(); 这句是新建一个文件.file.separator这个代表系统目录中的间隔符,说白了就是斜线,不过有时候需要双线,有时候是单 ...

  6. 4-13 Webpacker-React.js; 用React做一个下拉表格的功能: <详解>

    Rails5.1增加了Webpacker: Webpacker essentially is the decisions made by the Rails team and bundled up i ...

  7. python-day12--函数进阶

    1.命名空间: 分三种:全局命名空间,局部命名空间,内置命名空间. 加载顺序:内置命名空间→全局命名空间→局部命名空间 取值顺序:局部命名空间→全局命名空间→内置命名空间 2.作用域: 作用域就是作用 ...

  8. python-day9-数据类型总结

    数据类型总结: 常用:  数字 字符串 列表 元组 字典 不常用:集合 1.按照存值个数: 1个:数字,字符串 多个:列表,元组,字典,(集合) 2.按照可变不可变: 可变:列表,字典,(集合) 不可 ...

  9. mysql导入导出数据过大命令

    phpmyadmin 导入或者导出都是有限制的,当导入或者导出的数据会报错. 1.导入数据库 mysql -u root -p<备份文件的保存路径 eg: mysql -u root -p &l ...

  10. 最小生成树(模板 Kruskal)

    Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达 ...