手机版

使用percona-toolkit工具检查MySQL数据库主从一致性及修复

时间:2021-08-01 来源:互联网 编辑:宝哥软件园 浏览:

类型:数据库班级规模:5.5M语言:英语成绩:3.3标签:立即下载。使用percona-toolkit工具检查MySQL数据库中主从复制数据的一致性并修复。

I . pt-table-校验和检查主从库数据的一致性

pt-table-checksum验证MASTER上的指定库和表,将结果存储在库表中,复制过程将验证sql传递给从机并再次执行。通过比较M/S的测试值来判断数据是否一致,采用主从复制进行验证,可以在不影响正常服务的情况下控制验证的数据和速度。

安装:

#依赖包yumyperl-dbiperl-DBD-MySQL perl-termreadkey # percona-toolkit包wget http://www . percona.com/downloads/percona-toolkit/latest/percona-toolkit-2 . 2 . 4 . tar . gztar xzvf percona-toolkit-2.2.4.tar.gz;CD percona-toolkit-2 . 2 . 4;Perl Makefile.pl make make install用法:

pt-表-校验和[选项] [DSN]

Pt-table-checksum:通过对主M执行校验查询来检查复制的一致性,比较主、从的校验值生成结果。DSN指的是主机的地址,工具的退出状态不为零。如果发现任何差异,或者出现任何警告或错误,请参考官方网站了解更多信息。

在不指定任何参数的情况下,将直接检查所有本地数据库的表。

pt-table-checksums/tmp/mysqld . sock u=root,p=123456环境:

#主库:mysql从t1中选择*;-| id | name |-| 1 | aa | | 2 | bb | | 3 | cc | | 4 | DD | | 5 | ee |-集合中的5行-| id | name |-| 1 | aa | | 2 | bb | | 3 | cc | | 4 | DD |-集合中的4行(0.00秒)

1.根据测试,你需要一个登录主库、登录从库、同步数据库账号的技能;

2.只能指定一台主机,必须是主库的IP;

3.检验时会在表中增加s锁;

4.在运行之前,库的同步输入输出和SQL进程应该处于是状态。

您可以使用此语句来授权用户。在这里,为了方便,直接使用root。

授予选择、处理、超级、复制从属开*。* TO“校验和”@“x . x . x . x”由“xxxx”标识;执行测试(在主机上):

pt-table-checksum-no check-replication-filters-replicate=test . checksum-databases=test h=192 . 168 . 68 . 235,u=root,P=123-empty-replicate-table-create-replicate-tables错误diffrows区块跳过时间表09-18t 12:03:16 0 1510 0 0.018 test . t1参数描述:

TS:检查完成的时间。

错误:检查过程中出现的错误和警告的数量。

Diffs: 0表示一致,1表示不一致。当指定-no-replicate-check时,它将始终为0,而当指定-replicate-check-only时,将显示不同的信息。

ROWS:表中的行数。

CHUNKS:分成表的块的数量。

跳过:由于错误或警告或太大而跳过的块的数量。

时间:执行时间。

表:被检查的表的名称。

参数含义:

-nocheck-replication-filters:不要选中- nocheck-replication-filters,建议启用它。您可以稍后使用- databases来指定要检查的数据库。

-no-check-binlog-format:不检查复制的binlog模式,如果binlog模式为ROW,将报告错误。

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

-replicate=:将校验和信息写入指定的表中,建议直接写入被检查的数据库中。

-databases=:指定要检查的数据库,并用逗号分隔多个数据库。

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

H=127.0.0.1:主机的地址

U=root:用户名

P=123456:密码

P=3306:端口

更多参数见官网,常用的,足够这个场景用了。

从DIFFS为1可以看出主从表数据不一致。您可以通过查看从库中的test.checksum表来查看主从库的测试信息。

关系型数据库从校验和\G中选择*;*************************** 1.行*************** db:测试TBL : t1数据块: 1数据块_时间: 0.001604数据块_索引: nulllow _边界: NULLupper _边界: NULL this _ CRC : 13fa 7d #从的校验值this_cnt: 4 #从的行数master_crc: aa7a56c3 #主的校验值master_cnt: 5 #主的行数套件中的ts : 2013-09-18 12:0:161行(0.00秒)通过上面的此_crc主机_crc更能清楚的看出他们的不一致了,通过矮胖的人或物知道是这个张表的哪个块上的记录出现不一致。要是主的日志模式是排则会报错:

副本db2具有binlog_format ROW,这可能会导致pt-表-校验和中断复制。

请阅读该工具文档的"限制"部分中的"使用基于行的复制的副本"。

如果您了解风险,请指定-不检查-binlog-格式禁用此检查。

从错误信息得出,要是不改日志模式的话,则在执行上面的命令时候要指定:- no-check-binlog-format,即:

pt-table-checksum-no check-replication-filters-no-check-binlog-format-replicate-check-only-replicate=test。校验和-数据库=测试表=t1 h=127。0 .0 .1,u=根,p=123,P=3306指定-仅复制-检查参数会在前一次pt-表-校验和检验的数据之上比较(不会再执行计算),显示出数据不一致的奴隶主机名:

[root @ host 125 ~]# pt-table-checksum-no check-replication-filters-no-check-binlog-format-replicate-check-only-replicate=test。校验和-数据库=测试表=t1 h=127。0 .0 .1,u=root,p=123456,P=3306[root @ host 125 ~]# pt-table-checksum-no check-replication-filters-replicate=test。校验和-数据库=测试h=192。168 .68数据不一致的奴隶和表都找出来了,下面就用元素铂的符号表同步来修补数据。

二、pt表同步修复从库不一致的数据

使用方法:

pt-table-sync [OPTIONS] DSN [DSN]

元素铂的符号表-sync:高效的同步关系型数据库表之间的数据,他可以做单向和双向同步的表数据。他可以同步单个表,也可以同步整个库。它不同步表结构、索引、或任何其他模式对象。所以在修复一致性之前需要保证他们表存在。

继续上面的复制环境,主和从的一种网络的名称(传输率可达1.54mbps)级(一种通讯线路的名称)表数据不一致,需要修复,

执行:

[root @ host 125 ~]# pt-table-sync-print-replicate=test。校验和h=192。168 .68 .235,u=根,p=123,P=3306 h=192.168.68.232,u=根,p=123,P=3306 #先掌握的知识产权,再奴隶的IPREPLACE INTO `test`.`t1`(`id `,` name`) VALUES ('5 ',' ee ')/* percona-toolkit src _ db : test src _ TBL : t1 src _ DSN : P=3306,h=192.168.68.235,P=.u=根dst _ db :测试dst _ TBL : t1 dst _ DSN : P=3306,h=192.168.68.232,P=.u=根锁:1事务:1 changing _ src :测试。校验和复制:测试。校验和双向:24763用户:根主机:主机125 */;参数的意义:

- replicate=:指定通过pt-表-校验和得到的表,这2个工具差不多都会一直用。

-数据库=:指定执行同步的数据库,多个用逗号隔开。

-表格=:指定执行同步的表,多个用逗号隔开。

-同步至主机:指定一个DSN,即从的知识产权,他会通过显示进程列表或显示从属状态去自动的找主。

h=127.0.0.1:服务器地址,命令里有2个ip,第一次出现的是M的地址,第2次是奴隶的地址。

u=根:帐号。

p=123456:密码。

-打印:打印,但不执行命令。

-执行:执行命令。

更多的参数请见官网,上面指出来的是常用的,对该场景够用的参数。

和上面的命令一样效果的命令:

[root @ host 125 ~]# pt-table-sync-print-sync-to-master h=192 . 168 . 68 . 232,u=root,p=123,p=3306-数据库测试-表t1 #带有一个IP(。REPLACE INTO `test`.`t1`(`id `,` name`) VALUES ('5 ',' ee ')/* percona-toolkit src _ db : test src _ TBL : t1 src _ DSN : P=3306,h=192.168.68.235,p=.u=根dst _ db : test dst _ TBL : t1 dst _ DSN : P=3306,h=192.168.68.232,p=.u=root lock :1 transaction :1 changing _ src :1 replicate :0双向:0 PID :24798 user : root host : host 125 */;您也可以让它执行自己的SQL语句来修复数据,但是没有输出:

[root @ host 125 ~]# pt-table-sync-execute-sync-to-master h=192 . 168 . 68 . 232,u=root,p=123,P=3306 -数据库测试-tables t1

数据已修复:

mysql从t1中选择*;-| id | name |-| 1 | aa | | 2 | bb | | 3 | cc | | 4 | DD | | 5 | ee |-集合中的5行否则会直接执行,出现问题后处理起来会比较困难。总之,处理前做好数据备份。

注意:如果表中没有唯一索引,或者主键将报告错误:

无法在主服务器上进行更改,因为在/usr/local/bin/pt-table-sync行10591不存在唯一索引。

补充:

如果从库中有数据而主库中没有,该如何处理这些数据?给出了删除SLAVE冗余数据和修复SLAVE缺失数据的SQL语句。

如果不想在shell窗口中显示输入的密码,可以添加:- ask-pass参数,例如:

[root @ host 125 ~]# pt-table-sync-print-ask-pass-sync-to-master h=192 . 168 . 68 . 232,u=root,p=3306-数据库测试-表t1输入密码为192。

无法读取响应;是否安装了Term:ReadKey?在@INC中找不到术语/ReadKey.pm

要安装Term/ReadKey.pm模块:

[root @ host 125 ~]# perl-mcpan-e ' shell ' CPAN[1]install term :3360读取密钥摘要:

该工具执行检查列表操作,这需要高权限来检查连接的帐户,以及常规权限,如选择、处理、超级、复制从属等。pt-table-checksm与pt-table-sync一起使用,在执行pt-table-sync数据同步之前,必须检查pt-table-checksm命令。

版权声明:使用percona-toolkit工具检查MySQL数据库主从一致性及修复是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。