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模块的时候,出现类似下面的错误提示:
Can’t locate object method “install” via package “…”
如果你也遇到了类似的问题,可以进入到Perl命令行安装:
yum install YAML
shell> perl -MCPAN -e shell
cpan> install ...

下载地址:wget http://www.percona.com/downloads/percona-toolkit/2.2.14/tarball/percona-toolkit-2.2.14.tar.gz
安装方法:perl Makefile.PL;make;make install

二.在master上做授权操作:(IP为主库地址)
mysql> grant select ,process,super,replication slave on *.* to ‘user‘@‘192.168.9.140‘ identified by ‘userpw‘; 
mysql> flush privileges; 
  注:select:查看所有库的表;process:执行show processlist ;super:设置binlog_format=‘statement’ 
         replication slave:show slavehosts 
数据库主从结构:
主:192.168.9.140 (binlog_format=mixed)
从:192.168.9.142 (binlog_format=mixed)

三.主从库执行数据一致检查
[[email protected]:/]# pt-table-checksum h=‘192.168.9.140‘,u=‘user‘,p=‘userpw‘,P=3306 --databases db1 --tables t1  --max-load="Threads_running=25" --nocheck-replication-filters --create-replicate-table --replicate=test.checksums --no-check-binlog-format --no-check-slave-tables
            TS ERRORS  DIFFS     ROWS  CHUNKS SKIPPED    TIME TABLE
05-13T15:42:58      0      1        8       1       0   0.030 db1.t1
查询结果显示 diffs =1 表示db1.t1表主从库数据存在异常.

执行结果显示参数意义: 
 TS        :完成检查的时间. 
ERRORS     :检查时候发生错误和警告的数量. 
DIFFS      :0表示一致,1表示不一致.当指定--no-replicate-check时,会一直为0,当指定--replicate-check-only会显示不同的信息. 
ROWS       :表的行数. 
CHUNKS     :被划分到表中的块的数目. 
SKIPPED    :由于错误或警告或过大,则跳过块的数目. 
TIME       :执行的时间. 
TABLE      :被检查的表名

参数详解:
[[email protected]:/]# pt-table-checksum --help   查看所有的参数信息.
  h=‘192.168.9.140‘,u=‘user‘,p=‘userpw‘,P=3306  连接主数据库的IP,用户名与密码,端口.
  --create-replicate-table:这个参数只在第一次运行时添加就可以,用于建立checksums表;后续不需要添加此参数,如果添加了会重新创建checksums表. 
  --nocheck-replication-filters:不检查复制过滤器(即参数文件里设置的repliacte-do-waild-table等规则) 
  --no-check-binlog-format :不检查复制的binlog格式(这个参数在,binlog_format=row时,一定要加,不然报错) 
  --replicate=kz.checksums:把checksum的信息写入指定库,指定表,建议直接写到被检查的库里.
  --ignore-tables=mysql.user:对某个表忽略检查
  --tables 指定被检查的表名;可以多个表,按逗号分开. 例如:--tables t1,t2
  ----databases 指定被检查的库名,如果没有此参数将检查所有库;也可以指定多个库名,例如:--databases db1,db2

更多参数使用方法:
  --recursion-method               processlist,hosts

要是在执行命令的过程遇到找不到从服务器的错误:
Diffs cannot be detected because no slaves were found.  Please read the --recursion-method documentation for information.
上面的提示信息很清楚,因为找不到从,所以执行失败.用参数--recursion-method 可以指定模式解决,关于--recursion-method参数的设置有:

METHOD       USES
===========  =============================================
processlist  SHOW PROCESSLIST
hosts        SHOW SLAVE HOSTS
cluster      SHOW STATUS LIKE ‘wsrep\_incoming\_addresses‘
dsn=DSN      DSNs from a table
none         Do not find slaves

默认是通过show processlist 找到host的值;当--recursion-method=hosts 时会取show slave hosts 找到host的值.
使用--recursion-method=hosts 参数也同步可以解决,因从库比较多,而是跨机房从库检查慢的问题.可指定其中一个从库进行检查.
使用解决方法:
在从库的配置文件里加: report_host = 192.168.9.142   #设置成从库本机IP地址,并重启数据库
然后在主库上执行 show slave hosts

>show slave hosts;
+-----------+----------------+------+----------+------+-------------------+-----------+
| Server_id | Host           | User | Password | Port | Rpl_recovery_rank | Master_id |
+-----------+----------------+------+----------+------+-------------------+-----------+
|         2 | 192.168.9.142  |      |          | 3306 |                 0 |        140|
+-----------+----------------+------+----------+------+-------------------+-----------+
1 row in set (0.00 sec)

最后再执行以上命令(多加--recursion-method=hosts 参数)
pt-table-checksum --recursion-method=hosts h=‘192.168.9.140‘,u=‘user‘,p=‘userpw‘,P=3306 --databases db1 --tables t1 --max-load="Threads_running=25" --nocheck-replication-filters --replicate=test.checksums --no-check-binlog-format --no-check-slave-tables

四.对主从数据不一致性进行修复
语法结构: pt-table-sync [OPTIONS] DSN [DSN]
pt-table-sync: 高效的同步MySQL表之间的数据,他可以做单向和双向同步的表数据.他可以同步单个表,也可以同步整个库.它不同步表结构、索引、或任何其他模式对象.所以在修复一致性之前需要保证他们表存在.
pt-table-sync --help 查看详细参数.
  1.根据pt-table-checksum 检查的结果数据库进行合并. 主要指定--replicate=test.checksums
  2.直接进行表数据合并,从主库上面同步到从库. (从库不存在主库上面的表)

推荐根据pt-table-checksum 检查的结果数据库进行合并.
接着上面的复制情况,主和从的test1数据不一致,需要修复,要是有中文的则需要加上:--charset=utf8,防止乱码.
1>指定库,表进行数据合并:
pt-table-sync --recursion-method=hosts --replicate test.checksums --databases=db1 --tables=t1 --sync-to-master h=192.168.9.142,P=3306,u=user,p=userpw --charset=utf8 --print;   //打印主从存在异常的数据
pt-table-sync --recursion-method=hosts --replicate test.checksums --databases=db1 --tables=t1 --sync-to-master h=192.168.9.142,P=3306,u=user,p=userpw --charset=utf8 --execute; //执行数据一致性同步
2> 只根据test.checksums的结果进行数据合并.
pt-table-sync --replicate test.checksums --sync-to-master h=192.168.9.142,P=3306,u=user,p=userpw --charset=utf8 --print;  //打印主从存在异常的数据 
pt-table-sync --replicate test.checksums --sync-to-master h=192.168.9.142,P=3306,u=user,p=userpw --charset=utf8 --execute;//执行数据一致性同步

pt-table-sync --replicate=test.checksums h=192.168.9.140 --user=user --password=userpw h=192.168.9.142,u=user,p=‘userpw‘ --charset=utf8 --print //打印主从存在异常的数据
pt-table-sync --replicate=test.checksums h=192.168.9.140 --user=user --password=userpw h=192.168.9.142,u=user,p=‘userpw‘ --charset=utf8 --excute //执行数据一致性同步

将主的test数据库同步到192.168.9.142,使从上具有一样的数据
pt-table-sync --execute --sync-to-master --user=user --password=userpw  h=192.168.9.142 --database test

只同步指定的表(aaa 表)
pt-table-sync --execute --sync-to-master --user=user --password=userpw  h=192.168.9.142 D=test,t=aaa

参数的解释:
--replicate=  :指定通过pt-table-checksum得到的表.
--databases=  : 指定执行同步的数据库,多个库用逗号隔开.
--tables=     :指定执行同步的表,多个表用逗号隔开.
--sync-to-master :指定一个DSN,即从的IP,他会通过show processlist或show slave status 去自动的找主.
 h=127.0.0.1   :服务器地址,命令里有2个ip,第一次出现的是M的地址,第2次是Slave的地址.
 u=root        :帐号.
 p=123456      :密码.
 --print       :打印,但不执行命令.
 --execute     :执行命令.

更多的参数请见官网
https://www.percona.com/doc/percona-toolkit/2.2/pt-table-checksum.html
https://www.percona.com/doc/percona-toolkit/2.2/

时间: 2024-08-05 15:03:06

Mysql 主从数据库一致性检查与修复的相关文章

MySQL主从的一致性校验及修复

主从的一致性校验 场景: 比如在面试中,面试官会问道:如何验证主从的一致性 又或者问:一个库里有几十张表 主从结构数据是否一致? 简单来讲可以在低峰期主从上分别使用select count(*)来看一下,这种方式是最古老的,准确度不是很高 盗贴 麻烦 说一声,本文来自 yijiu.blog.51cto.com 主流方法: 使用pt-table-checksum验证主从的一致性 盗贴 麻烦 说一声,本 文l来自 yijiu.blog.51cto.com Pt-table-checksum的工作流程

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

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

MySQL主从数据库同步延迟问题解决(转)

最近在做MySQL主从数据库同步测试,发现了一些问题,其中主从同步延迟问题是其中之一,下面内容是从网上找到的一些讲解,记录下来以便自己学习: MySQL的主从同步是一个很成熟的架构,优点为:①在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力;②在从主服务器进行备份,避免备份期间影响主服务器服务;③当主服务器出现问题时,可以切换到从服务器. MySQL主从同步故障-Slave_SQL_Running: No http://www.linuxidc.com/Linux/2014-0

mysql主从数据库配置

在这里吧昨天做的主从数据库配置记录下来,免得以后折腾 数据库主从配置心得: master : 192.168.16.247 slave1 : 192.168.16.248 1 修改配置文件 /etc/mysql/my.cnf(如果my.cnf已有该配置项,则相应的进行修改) 主数据库: server-id = 1 log-bin = mysql-bin log-bin-index = mysql-bin.index #log_bin = /var/log/mysql/mysql-bin.log

Mysql主从数据库架构的复制原理及配置详解

1 复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的.复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置.从服务器接收

Ubuntu配置Mysql主从数据库

MySQL数据库支持数据库的主从复制功能,因此在集群方面具有其独特的优势.众多国内外大型网站架构体系中,均采用了MySQL的主从数据库配置来实现查询负载.数据库热备等功能.本人在实际的Web项目中也涉及到这一需求,在此将如何配置实现做个简单小结. 本次环境:虚拟机下 服务器:Ubuntu 14.04 LTS数据库: 5.5.37端口:3306主IP:192.168.63.133从IP:192.168.63.134授权账号:user:suxhpassword:111111好了交代完环境:我们直接配

MySQL 主从数据库设置

1.复制的介绍 MySQL 支持单向.异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引 以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置. 从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新. 请注意当你进行复制时,所有对复制中的表的更新必须在主服务器上进行.否则,你必须要小心,以避免用户对主服务器

mysql主从数据库不同步的3种解决方法

mysql主从数据库不同步的3种解决方法 今天发现Mysql的主从数据库没有同步 先上Master库: mysql>show processlist; 查看下进程是否Sleep太多.发现很正常. show master status; 也正常. mysql> show master status; +-------------------+----------+--------------+-------------------------------+ | File | Position |

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

一.简介: 该软件是由由领先的MySQL咨询公司Percona发布的 Percona的很多软件我只能说是强!!!改公司开发的部分工具软件甚至已经超越oracle 自身所开发的工具软件 因此不用怀疑这个公司开发的软件会不会带来什么风险 pt-table-checksum,pt-table-sync 是percona-toolkit工 具集的工具之一用来检查与修复主从不一致数据之用.它通过在主库执行基于statement模式的sql语句来生成主库数据块的总和校验,把相同的sql语句传递到从库,并在从