mysql 主从一致性检查以及修复

一.简介:

该软件是由由领先的MySQL咨询公司Percona发布的

Percona的很多软件我只能说是强!!!改公司开发的部分工具软件甚至已经超越oracle 自身所开发的工具软件

因此不用怀疑这个公司开发的软件会不会带来什么风险

pt-table-checksum,pt-table-sync

percona-toolkit工 具集的工具之一用来检查与修复主从不一致数据之用。它通过在主库执行基于statement模式的sql语句来生成主库数据块的总和校验,把相同的sql语句传递到从库,并在从库上计 算相同数据块的总和校验,最后,比较主从库上相同数据块的总和校验值,由此判断主从数据是否一致。这种校验是分表进行的,在每个表内部又 是分块进行的,而且pt工具本身提供了非常多的限流选项,因此对线上服务的冲击较小

二.环境

主 192.168.186.138   [[email protected] ~]  mysql2.com

从192.168.186.140   [[email protected] ]  dbserver1.com

三.安装

(1).安装相关依赖包:

[[email protected] opt]# yum -y install perl-DBI perl-DBD-MySQL 
perl-TermReadKey

(2).安装percona-toolkit

可以rpm 方式也可以源代码编译

我这里用源代码编译

[[email protected] opt]# tar -xf percona-toolkit-2.2.2.tar.gz 
[[email protected] percona-toolkit-2.2.2]# perl Makefile.PL
[[email protected] percona-toolkit-2.2.2]# make && make install

四:授权

主机mysql 上授权

mysql> GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE ON *.* TO ‘opt‘@‘192.168.186.138‘ IDENTIFIED BY ‘123‘;
Query OK, 0 rows affected (0.03 sec)
 
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

五.检测

[[email protected] local]#  pt-table-checksum h=‘192.168.186.138‘,u=‘opt‘,p=‘123‘,P=3306 -d lisi --nocheck-replication-filters --no-check-binlog-format --replicate=test.wocao
Diffs cannot be detected because no slaves were found.  Please read the --recursion-method documentation for information.
            TS ERRORS  DIFFS     ROWS  CHUNKS SKIPPED    TIME TABLE
07-20T18:41:58      0      0   655360      10       0   4.498 lisi.book
Checksumming lisi.haowutest:  52% 00:27 remain
Checksumming lisi.haowutest:  92% 00:04 remain
07-20T18:43:05      0      0  7676940      70       0  66.694 lisi.haowutest
07-20T18:43:05      0      0        2       1       0   0.118 lisi.j
07-20T18:43:05      0      0        2       1       0   0.099 lisi.l
07-20T18:43:05      0      0        0       1       0   0.145 lisi.lisi
07-20T18:43:05      0      0        3       1       0   0.134 lisi.o
07-20T18:43:05      0      0        0       1       0   0.057 lisi.wanger
07-20T18:43:06      0      0        7       1       0   0.166 lisi.wanger1
07-20T18:43:06      0      0        0       1       0   0.144 lisi.ww

在这里还引申出了一个知识点

我本来想在从上删除lisi.haowutest表的一部分数据 然后跳过错误 再做一次检查 既然发现slave_skip_errors =1045 没有用 这是怎么回事呢

原来myql 表授权信息变了

[[email protected] data]# cat master.info  发现授权给slave的连接密码已经和mysql.user表里面的不一致了

所以我建议mysql库还是不要同步的好 省的发生乱起八糟 不可思议的问题。关于授权在线上曾经发生过很多奇葩的问题在此不做讨论了

实验继续

现在haowu.test表数据时不一致的情况下检测 DIFFS为0表示一致为1表示不一致

[[email protected] data]# pt-table-checksum h=‘192.168.186.138‘,u=‘opt‘,p=‘123‘,P=3306 -d lisi --nocheck-replication-filters --no-check-binlog-format --replicate=test.wocao
            TS ERRORS  DIFFS     ROWS  CHUNKS SKIPPED    TIME TABLE
07-20T21:04:44      0      0   655360      10       0   7.600 lisi.book
Checksumming lisi.haowutest:  74% 00:10 remain
07-20T21:05:28      0      1  7676940      58       0  43.484 lisi.haowutest
07-20T21:05:28      0      0        2       1       0   0.069 lisi.j
07-20T21:05:28      0      0        2       1       0   0.061 lisi.l
07-20T21:05:28      0      0        0       1       0   0.083 lisi.lisi
07-20T21:05:28      0      0        3       1       0   0.063 lisi.o
07-20T21:05:28      0      0        0       1       0   0.074 lisi.wanger
07-20T21:05:28      0      0        7       1       0   0.064 lisi.wanger1
07-20T21:05:28      0      0        0       1       0   0.063 lisi.ww

可以看出lisi.haowutest 有记录数不一致 上去看看是不是这样

[[email protected] data]# mysql -phaowu123
mysql> select count(*) from lisi.haowutest;
+----------+
| count(*) |
+----------+
|  7676940 |
+----------+
1 row in set (10.35 sec)
 
[[email protected] data]# mysql -phaowu123
mysql> select count(1) from lisi.haowutest;
+----------+
| count(1) |
+----------+
|  7676632 |
+----------+
1 row in set (7.22 sec)

果然不一致

六.修复

[[email protected] data]# pt-table-sync --print --sync-to-master  h=192.168.186.140,D=lisi,t=haowutest -uopt -p123

查看下

解释:

pt-table-sync --print --sync-to-master h=1.1.1.1,D=test,t=test1 -uxxx -p123(其中这个xxx用户密码要机能登录到master也能登录到slave,需要的权限select,super,replication client,process)

修复从库1.1.1.1上test库的test表上的数据

如果把--print换成--execute则是直接执行  建议先用--print保存下看看再--execute  这样看到sql执行比较放心

可以打开gengral log很容易看到master和slave上执行的操作,分别去一段段的数据做对比校验 ,有不同的立刻用replace into在master去执行

[[email protected] data]# pt-table-sync --execute --sync-to-master  h=192.168.186.140,D=lisi,t=haowutest -uopt -p123

这就是修复了

话虽如此但是要是不行的话 还是在两边都授个全部权限吧

mysql> grant all on *.* to [email protected]‘%‘ identified by ‘123‘;
Query OK, 0 rows affected (0.03 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> \q
Bye
[[email protected] data]# pt-table-sync --execute --sync-to-master  h=192.168.186.138,h=192.168.186.140,D=lisi,t=haowutest -uwe -p123
OK 至此结束
[[email protected] data]# mysql -phaowu123
mysql> select count(*) from lisi.haowutest;
+----------+
| count(*) |
+----------+
|  7676940 |
+----------+
1 row in set (7.25 sec)
[[email protected] data]# mysql -phaowu123
 
mysql> select count(*) from lisi.haowutest;
+----------+
| count(*) |
+----------+
|  7676940 |
+----------+
1 row in set (7.25 sec)

修复完成

七.命令参数详解

不指定参数,表示对本地的所有数据库的表进行检查。[[email protected] Desktop]#pt-table-checksum u=root,p=haowu123

参数说明:

TS            :完成检查的时间。

ERRORS        :检查时候发生错误和警告的数量。

DIFFS         :0表示一致,1表示不一致

ROWS          :行数。

CHUNKS        :被划分到表中的块的数目。

SKIPPED       :由于错误或警告或过大,则跳过块的数目。

TIME          :执行的时间。

TABLE         :被检查的表名。

参数意义:

--nocheck-replication-filters :不检查复制过滤器,建议启用。后面可以用--databases来指定需要检查的数据库。

--no-check-binlog-format      : 不检查复制的binlog模式,要是binlog模式是ROW,则会报错。就是说如果是row模式必须加上这玩意

--replicate-check-only :只显示不同步的信息。

--replicate=   :把checksum的信息写入到指定表中,建议直接写到被检查的数据库当中。

--databases=   :指定需要被检查的数据库,多个则用逗号隔开。

--tables=      :指定需要被检查的表,多个用逗号隔开

更多的参数请见官网

如有疑问建议请提出,谢谢!!

时间: 2024-12-09 07:30:12

mysql 主从一致性检查以及修复的相关文章

mysql 主从一致性检查

我上一次遇到MySQL主从服务器数据一致性问题,想想是几年前的事情了,还依稀记得当时惊慌失措的情景,好在最后借助Maatkit解决了问题.几年后,当我再次面对同样的问题时,Maatkit已经不复存在,转而成为了Percona Toolkit的一部分,不变的是我依旧手忙脚乱,所以还是记录一下吧,保不准啥时候又会遇到这个问题. 如果你在MySQL从服务器上遇到类似下面的错误信息,那么恭喜你中招了: mysql> SHOW SLAVE STATUS\G Last_Error: Error 'Dupli

mysql主从一致性校验工具-pt

一.环境 1.系统环境 系统 IP 主机名 说明 server_id centos6.7 MasterIP master 数据库:主 177  centos6.7 SlaveIP slave 数据库:从 148 2.软件环境 软件 版本 安装方式 说明 pt工具 3.0.4 编译安装 这是一个综合工具包,包含很多pt命令 mysql数据库 5.6.37 yum安装 主从环境 3.需要用到库 库名 表名 用途  percona checksums 存储pt命令监测的结果,第一次执行检测命令时会自己

Mysql 主从数据库一致性检查与修复

利用pt-table-checksum 检查主从的一致性,pt-table-sync实现主从数据一致性修复 一.percona-toolkit的下载安装:需要先安装其它依赖环境包...shell> perl -MCPAN -e 'install DBI'shell> perl -MCPAN -e 'install DBD::mysql'shell> perl -MCPAN -e 'install Term::ReadKey'顺便说一下,我在安装某些Perl模块的时候,出现类似下面的错误提

percona-toolkit之pt-table-sync修复Mysql主从数据一致性

下载及用户赋权参考上篇文章percona-toolkit之pt-table-checksums检测Mysql主从数据一致性 先使用pt-table-checksums检测数据一致性,然后使用pt-table-sync进行主从一致性修复,注意修复的表必须有主键或者唯一索引 主库bash下执行: ./pt-table-checksum --nocheck-replication-filters --replicate=test.checksums --host=10.50.12.33 --port

实战处理mysql主从延时不一致之手动修复

前2天经常被同事反应crm后台系统和前台,经常报前后查询不一致的问题.一开始也很抓狂,从集群.日志跟踪.网络转包等方面排查,都没找到原因,后来经过和研发同事一起沟通,提出线上mysql主从数据库可能不一致导致,于是立马登陆mysql主从服务器,查看复制状态,到这很明显问题就找到. 手动修复主从延时不一致,主库完整mysqldump导出,注意用的参数.经过实践,是线上成功修复主从不一致的结果哦.还有个奇葩的问题,就是刚修复主从不一致,很快又出现,延时又拉很大.到这你是否会想到,主库有大量数据的写入

检查mysql主从同步结构中的从数据库服务器的状态-脚本shell

检查mysql主从同步结构(一主一从)中的从数据库服务器的状态          (ip授权.从服务器和IO是否正常.从mysql进程是否正常) 主mysql: 192.168.1.10 从mysql: 192.168.1.20 [[email protected] ~]# vi check_slave.sh #!/bin/bash master=192.168.1.10 i=1 service mysqld status &>/dev/null while [ true ] do echo

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.168.1.3的数据库参数后,重启数据库.忘记了192.168.1.4又是192.168.1.2的从库,导致192.168.1.2和192.168.1.4的主从断掉.并且在192.168.1.2上创建了新库还原数据删除等操作,导致192.168.1.4提示错误. 模拟如下:通过从库查看主从状态:mys

使用Innobackupex快速搭建(修复)MySQL主从架构

MySQL的主从搭建大家有很多种方式,传统的mysqldump方式是很多人的选择之一.但对于较大的数据库则该方式并非理想的选择.使用Xtrabackup可以快速轻松的构建或修复mysql主从架构.本文描述了使用innobackupex快速来搭建或修复主从架构.供大家参考. 1.基于主库做一个完整备份 # mkdir -p /log/bakforslave # innobackupex --user=root -password=*** --socket=/tmp/mysql.sock --def

利用percona-toolkit 工具来检测mysql 主从数据库同步以及实现同步

环境: OS: Cenos6.5_x64 , 主:192.168.100.164 ,从:192.168.100.176 软件: percona-toolkit . mysql56-community 同步的库: dj1 , cnhd , shanhu 备要信息:要尽量保证主从mysql的版本相同,因为5.6以上的版本支持了Gtid的特性,与低版本做从主时,会产生不可以预计的问题. 一.安装: Quick Install -------------    perl Makefile.PL    m