17站长网 网站首页 数据库 Mysql 查看内容

利用percona-toolkit检查并修复mysql集群的数据统一性

2023-3-16 15:30| 查看: 692 |来源: 互联网

percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql任务和系统任务,这些任务包括: · 检查master和slave数据的一 ...

percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql任务和系统任务,这些任务包括:

      ·  检查master和slave数据的一致性

      ·  有效地对记录进行归档

      ·  查找重复的索引

      ·  对服务器信息进行汇总

      ·  分析来自日志和tcpdump的查询

      ·  当系统出问题的时候收集重要的系统信息

在这里只介绍一下mysql主从复制+MHA架构下最常用到数据一致性检测及修复,当master宕机后,其中一个slaver被推举为主节点,宕机节点重新加入集群后,需根据bin log同步数据,为了保险起见还是要检查一遍集群的数据一致性,percona-toolkit就派上用场了

一、pt-table-checksum检查主从库数据的一致性

pt-table-checksum在MASTER上校验指定库、表,将结果存在一个库表里,复制进程将检验sql传递到slave上再执行一次。通过比较M/S的检验值确定数据是否一致。利用主从复制做检验,不需要在检验期间对主从数据库同时锁表,可以控制校验的数据和速度,不影响到正常服务。

安装:

#依赖包

yum  –y  perl-DBI  perl-DBD-MySQL  perl-TermReadKey

#percona-toolkit包

wget http://www.percona.com/downloads/percona-toolkit/LATEST/percona-toolkit-2.2.4.tar.gz

tar xzvf percona-toolkit-2.2.4.tar.gz ;  cd percona-toolkit-2.2.4 ;  perl Makefile.pl && make && make install

使用方法:

pt-table-checksum [OPTIONS] [DSN]

pt-table-checksum:在主上通过执行校验的查询对复制的一致性进行检查,对比主从的校验值,从而产生结果。DSN指向的是主的地址,该工具的退出状态不为零,如果发现有任何差别,或者如果出现任何警告或错误,更多信息请见官网。

不指定任何参数,会直接对本地的所有数据库的表进行检查。

pt-table-checksum –S /tmp/mysqld.sock u=root,p=123456

环境:

#主库:

mysql> select * from t1;

+----+------+

| id | name |

+----+------+

|  1 | aa   |

|  2 | bb   |

|  3 | cc   |

|  4 | dd   |

|  5 | ee   |

+----+------+

5 rows in set (0.00 sec)

#从库:

mysql> select * from t1;

+----+------+

| id | name |

+----+------+

|  1 | aa   |

|  2 | bb   |

|  3 | cc   |

|  4 | dd   |

+----+------+

4 rows in set (0.00 sec)

注意:

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

2、  只能指定一个host,必须为主库的IP;

3、  在检查时会向表加S锁;

4、  运行之前需要从库的同步IO和SQL进程是YES状态。

可以用该语句授权用户,这里为了方便直接用root用户了

GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE ON *.* TO ‘checksums’@’x.x.x.x’ IDENTIFIED BY ‘xxxx’;

执行检测(MASTER上):

pt-table-checksum --nocheck-replication-filters --replicate=test.checksum --databases=test h=192.168.68.235,u=root,p=123 --empty-replicate-table --create-replicate-table

            TS ERRORS  DIFFS     ROWS  CHUNKS SKIPPED    TIME TABLE

09-18T12:03:16      0      1        5       1       0   0.018 test.t1

参数说明:

TS            :完成检查的时间。

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

DIFFS         :0表示一致,1表示不一致。当指定--no-replicate-check时,会一直为0,当指定--replicate-check-only会显示不同的信息。

ROWS          :表的行数。

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

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

TIME          :执行的时间。

TABLE         :被检查的表名。

参数意义:

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

--no-check-binlog-format      : 不检查复制的binlog模式,要是binlog模式是ROW,则会报错。

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

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

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

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

h=127.0.0.1    :Master的地址

u=root         :用户名

p=123456       :密码

P=3306         :端口

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

通过DIFFS是1可以看出主从的表数据不一致。通过查看从库上的test.checksum表可以看到主从库的检验信息。

 mysql> select * from checksumG;

*************************** 1. row ***************************

            db: test

           tbl: t1

         chunk: 1

    chunk_time: 0.001604

   chunk_index: NULL

lower_boundary: NULL

upper_boundary: NULL

      this_crc: 13fa7d9d    #从的校验值

      this_cnt: 4            #从的行数

    master_crc: aa7a56c3    #主的校验值

    master_cnt: 5            #主的行数

            ts: 2013-09-18 12:03:16

1 row in set (0.00 sec)

通过上面的 this_crc <> master_crc 更能清楚的看出他们的不一致了,通过chunk知道是这个张表的哪个块上的记录出现不一致。要是主的binlog模式是Row 则会报错:

Replica db2 has binlog_format ROW which could cause pt-table-checksum to break replication.

Please read "Replicas using row-based replication" in the LIMITATIONS section of the tool's documentation.

If you understand the risks, specify --no-check-binlog-format to disable this check.

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

pt-table-checksum  --nocheck-replication-filters --no-check-binlog-format --replicate-check-only --replicate=test.checksum --databases=test --tables=t1  h=127.0.0.1,u=root,p=123,P=3306

指定--replicate-check-only参数会在前一次pt-table-checksum检验的数据之上比较(不会再执行计算),显示出数据不一致的SLAVE主机名:

[root@host125 ~]# pt-table-checksum  --nocheck-replication-filters --no-check-binlog-format --replicate-check-only --replicate=test.checksum --databases=test --tables=t1  h=127.0.0.1,u=root,p=123456,P=3306

[root@host125 ~]# pt-table-checksum --nocheck-replication-filters --replicate=test.checksum --databases=test h=192.168.68.235,u=root,p=123 --empty-replicate-table --create-replicate-table --replicate-check-only

Differences on host122

TABLE CHUNK CNT_DIFF CRC_DIFF CHUNK_INDEX LOWER_BOUNDARY UPPER_BOUNDARY

test.t1 1 -1 1

数据不一致的SLAVE和表都找出来了,下面就用pt-table-sync来修补数据。

二、pt-table-sync修复从库不一致的数据

使用方法:

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

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

继续上面的复制环境,主和从的t1表数据不一致,需要修复,

执行:

[root@host125 ~]# pt-table-sync --print --replicate=test.checksum h=192.168.68.235,u=root,p=123,P=3306 h=192.168.68.232,u=root,p=123,P=3306

#先MASTER的IP,再SLAVE的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=root dst_db:test dst_tbl:t1 dst_dsn:P=3306,h=192.168.68.232,p=...,u=root lock:1 transaction:1 changing_src:test.checksum replicate:test.checksum bidirectional:0 pid:24763 user:root host:host125*/;

参数的意义:

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

--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     :执行命令。

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

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

[root@host125 ~]# pt-table-sync --print --sync-to-master h=192.168.68.232,u=root,p=123,P=3306 --databases test --tables t1

#用一个IP (SLAVE)就可以了。

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=root 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 bidirectional:0 pid:24798 user:root host:host125*/;

还可以让它自己执行修复数据的SQL语句,但是这样就没有输出了:

[root@host125 ~]# pt-table-sync --execute --sync-to-master h=192.168.68.232,u=root,p=123,P=3306 --databases test --tables t1

数据已经修复完成了:

mysql> select * from t1;

+----+------+

| id | name |

+----+------+

|  1 | aa   |

|  2 | bb   |

|  3 | cc   |

|  4 | dd   |

|  5 | ee   |

+----+------+

5 rows in set (0.00 sec)

建议还是用--print 打印出来的好,这样就可以知道那些数据有问题,可以人为的干预下。不然直接执行了,出现问题之后更不好处理。总之还是在处理之前做好数据的备份工作。

注意:要是表中没有唯一索引或则主键则会报错:

Can't make changes on the master because no unique index exists at /usr/local/bin/pt-table-sync line 10591.

补充:

要是从库有的数据,而主库没有,那这个数据怎么处理?会给出删除SLAVE多余数据,和修复SLAVE缺失数据的SQL语句。

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

[root@host125 ~]# pt-table-sync --print --ask-pass --sync-to-master h=192.168.68.232,u=root,P=3306 --databases test --tables t1

Enter password for 192.168.68.232:

如果使用--ask-pass,报错:

Cannot read response; is Term::ReadKey installed? Can't locate Term/ReadKey.pm in @INC

安装Term/ReadKey.pm模块:

[root@host125 ~]# perl -MCPAN -e "shell"

cpan[1]> install Term::ReadKey

总结:

该工具执行检查表动作,检查连接的帐号需要有很高的权限,在一般权限上需要加SELECT, PROCESS, SUPER, REPLICATION SLAVE等权限。pt-table-checksm 配合pt-table-sync使用,在执行pt-table-sync数据同步之前,一定要执行pt-table-checksm命令检查。

本文最后更新于 2023-3-16 15:30,某些文章具有时效性,若有错误或已失效,请在网站留言或联系站长:17tui@17tui.com
·END·
站长网微信号:w17tui,关注站长、创业、关注互联网人 - 互联网创业者营销服务中心

免责声明:本站部分文章和图片均来自用户投稿和网络收集,旨在传播知识,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系我们及时修正或删除。谢谢!

17站长网微信二维码

始终以前瞻性的眼光聚焦站长、创业、互联网等领域,为您提供最新最全的互联网资讯,帮助站长转型升级,为互联网创业者提供更加优质的创业信息和品牌营销服务,与站长一起进步!让互联网创业者不再孤独!

扫一扫,关注站长网微信

大家都在看

  • 前阵子,腾讯历时 4 年打造的“ 末日僵尸生存”游戏《 黎明觉醒》,终于上线。在前期宣发中,光子工作室表示,游戏采用虚幻四打造,画面大幅升级,还会出现可探 ......

    游戏 2023-03-22
  • 《霍格沃茨之遗》的热潮退去后,这款游戏的Steam在线人数从近88万跌至7.5万。推特上有“反恐同”人士嘲讽道:“哈利·波特在霍格沃茨住了7年,你们这些粉丝连2个 ......

    游戏 2023-03-22
  • 继ChatGPT、文心一言之后,谷歌终于将自家对话式AI服务Bard开放测试。谷歌表示,公测将从美国和英国开始,开放更多用户访问是“改进它的下一个关键步骤”。与Cha ......

    软件 2023-03-22
  • 在谷歌宣布生成式AI Bard开启公测后,微软研究院首席研究员Kate Crawford在社交媒体发布文章,质疑Bard的训练数据集调用了Gmail的数据。换言之,Crawford质疑谷 ......

    软件 2023-03-22
  • 1、首先我们开机,如果已经开了那就重启电脑, 开机进入图示的“英特尔logo”画面时,马上进行第二步。 2、在进入类似上方的logo界面时,快速按下键盘上的“del ......

    系统问题 2023-03-21
  • 1、点击左下角开始,打开管理工具选择“高级安全windows防火墙”。 2、在左侧的任务栏中选择“入站规则”随后在右侧点击“新建规则”。 3、选择“端口”点击下 ......

    系统问题 2023-03-21
  • 答:administrator是系统管理员的意思,可以删除的。 这个单词的意思就是超级用户,是指电脑权限不受控的人。 删除是可以删除的,但是一定要在创建了第二个账户 ......

    系统问题 2023-03-21
  • 答:荣耀60se支持门禁卡。 只要更新到最新的操作系统。 并且使用支持nfc技术的门禁卡即可。 荣耀60se门禁卡添加教程: 1、首先打开手机“钱包app” 2、接着点 ......

    安卓手机 2023-03-21
  • 1、打开“资源管理器”,即可查看七个文件夹。 2、在空白桌面出建立“文本文档”。 3、随后进入文本文档,复制黏贴下列代码。 Windows Registry Editor Versio ......

    windows10 2023-03-22
  • 1、在开机界面重启三次后再次开机即可进入安全模式,点击“启用安全模式”。 2、随后点击左下角开始键,点击“设置”。 3、在windows设置中点击“应用”。 4 ......

    windows10 2023-03-21
  • 第一步,点击左下角的“开始菜单” 第二步,打开其中的“设置” 第三步,打开设置里的“系统”设置。 第四步,点击显示中的“显示适配器属性”选项。 第五步 ......

    系统问题 2023-03-21
  • 1、首先在桌面空白处右击选择个性化打开。 2、在打开的击界面点击打开右下角的屏幕保护程序。 3、在新开的屏幕保护界面就可以选择各种效果来保护屏幕了。 4、 ......

    windows7 2023-03-22
  • 答:电脑guest的意思是给客人访问电脑系统的账户。 在系统之中被称作“来宾账户”这个账户一般没有修改系统设置的权限。 可以用作读作计算机系统的信息和文件, ......

    系统问题 2023-03-21
  • 1、右击桌面此电脑,点击“属性”。 2、进入属性后点击“控制面板主页”。 3、在里面选择打开“程序和功能”。 4、随后在里面打开“启用或关闭windows功能” ......

    系统问题 2023-03-21
  • 答:appdata能删。 一般不建议删除,删除了之后容易造成应用程序配置丢失,可能在开启一些程序的时候会失败,严重清理还可能会导致无法启动。 里面有三个子文 ......

    系统问题 2023-03-21
  • 1、打开qq浏览器的页面,点击右上角“下载”图标, 2、会出现一个下载管理的页面,在这里就可以看到我们下载过的全部文件了。 找到qq浏览器的文件在哪里的方法 ......

    软件教程 2023-03-22
  • 1、首先单击电脑开始键,选择控制面板。 2、打开后找到语言选项,点击“更改显示语言” 3、打开后点击“管理”按钮。 4、再点击下方的“更改系统区域设置” ......

    windows7 2023-03-21
  • 现在抖音软件的功能越来越多了,我们在观看抖音视频的时候可以看到一些弹幕,这就是它的最新功能之一,那么抖音弹幕可以看到是哪个人发的吗?下面我们了解一下。 ......

    视频电商 2023-03-22
  • 一、来源不同 1、iso来源于系统光盘,gho来源于系统克隆文件。 二、使用方法不同 1、iso不需要解压缩,直接打开或刻录到光盘中读取就能安装。 2、gho需要解压运 ......

    系统问题 2023-03-21
  • 方法一: 1、首先打开手机的“电话”功能。 2、接着拨打电话。 3、拨通后,点击“红色方块”的录音就可以开始通话录音了。 方法二: 1、我们也可以在通话时 ......

    iphone 2023-03-21
  • 很多网友喜欢在淘宝平台的聚划算模块中购买产品,意味着你的商品价格非常实惠。淘宝聚划算模块中没有搜索框,那么如何在这里搜索想要的商品呢?下面为大家进行解 ......

    淘宝天猫 2023-03-22
  • 我们在安装DirectX软件的时候,经常会遇到提示不能信任一个安装所需的压缩文件,无法安装的问题,其实我们只需要下载正确的安装程序,就可以解决问题了。 不能 ......

    故障排除 2023-03-21
  • 答:电脑上一键ghost表示一个可以备份和还原系统的软件。 它直接翻译就是鬼或者幽灵,可以算是一个无人不知的程序。 基本包括了一键备份一键恢复和各种向导的功 ......

    系统问题 2023-03-21
  • 1、打开QQ浏览器,点击“我的”,再点击右上角“设置”图标, 2、进入设置页面后,点击“清除浏览数据”, 3、勾选需要清除的缓存数据的记录, 4、点击“一键 ......

    软件教程 2023-03-21
  • 1、win+r打开运行窗口。 2、输入cmd命令,点击确定。就会打开管理员命令窗口。 3、输入命令regedit打开注册表 4、打开HKEY_CLASSES_ROOT,找到lnkfile,在其 ......

    windows7 2023-03-22
  • 1、开始菜单打开控制面板。 2、在控制面板中找到硬件和声音,点击打开。 3、在硬件和声音窗口中选择电源选项。 4、点击电源选项窗口左侧的更改计算机睡眠时间 ......

    windows7 2023-03-21
  • 1、打开菜鸟APP进入首页。 2、找到想要拒收的快递,点击进入物流页面。 3、如果正在运输,找到快递员电话拨打,接通后说明原因拒收就可以了。 4、如果已经送 ......

    软件教程 2023-03-21
  • 微软的DirectX(简称DX)是Widows平台的游戏API,现在大家玩的PC游戏绝大多数是基于DX,DX12问世也好几年了,现在要推出新一代的DX13了吗?微软最新的暗示给人无 ......

    游戏 2023-03-22
  • 答:非常不错。 这个软件的功能非常的强大,有着很多的优质图书资源,而且很多都是免费就可以观看的。 点众阅读介绍 软件特色 1、阅读没有广告,非常流畅, ......

    软件教程 2023-03-21
  • 1、模拟器的gameprofiles文件里有这许多的不同ini文件, 其中00050000101C9300、00050000101C9400、00050000101C9500 分别代表塞尔达的三个版本, 2、在这些ini ......

    windows10 2023-03-22
返回顶部