pt-table-checksum主从一致性校验工具

本文介绍pt-table-checksum工具的功能及使用方法,用于检查MySQL主从复制的一致性。通过在线检查并生成replace语句进行比较,帮助确保数据同步正确。



pt-table-checksum主从一致性校验工具

1. 功能介绍

检查mysql复制一致性.


2. 用法介绍

pt-table-checksum [OPTION…] [DSN]

工作原理: pt-table-checksum在主上执行检查语句在线检查mysql复制的一致性,生成replace语句,然后通过复制传递到从,再通过update更新master_src的值。通过检测从上this_src和master_src的值从而判断复制是否一致。

[DSN] 指向的是主的地址。

  
注意事项:
测试需要一个既能登录主库、也能登录从库,而且能同步数据库的账号。 只能指定一个host,必须为主库的ip. 在检查时会向表加S锁. 运行之前需要从库的同步IO和SQL进程是YES状态 如果在配置主从时, 忽略复制mysql库时, 需要在主上和从上都执行下面的授权语句。 mysql> grant select, process, super, replication slave on *.* to 'checksums'@'x.x.x.x' identified by '123456';
  备注: 使用的时候选择业务地峰的时候运行,因为运行的时候会造成表的部分记录锁定。 使用--max-load来指定最大的负载情况,如果达到那个负载这个暂停运行。如果发现有不一致的数据,可以使用pt-table-sync工具来修复。

  (和1.0版本不同,新版本的pt-table-checksum只需要在master上执行即可)
3. [OPTION..]–选择参数
--nocheck-replication-filters :不检查复制过滤器,建议启用。后面可以用
--databases:来指定需要检查的数据库。
--no-check-binlog-format : 不检查复制的binlog模式,要是binlog模式是ROW,则会报错。
--replicate-check-only :只显示不同步的信息。
--replicate= :把checksum的信息写入到指定表中,建议直接写到被检查的数据库当中。
--databases= :指定需要被检查的数据库,多个则用逗号隔开。
--tables= :指定需要被检查的表,多个用逗号隔开
--create-replicate-table: 创建表(给用户创建表的权限)
--recursion-method: 主机信息
h=127.0.0.1 :Master的地址
u=root :用户名
p=123456 :密码
P=3306 :端口
4. 实例:
实例1:
>>> pt-table-checksum --nocheck-replication-filters --databases=activity --replicate=radius.checksums --create-replicate-table --no-check-binlog-format --host=192.168.7.131 --port=3306 -uroot -p123456
            TS ERRORS  DIFFS     ROWS  CHUNKS SKIPPED    TIME TABLE
07-31T14:17:44      0      1        4       1       0   1.131 activity.t
  TS            :完成检查的时间。
  ERRORS        :检查时候发生错误和警告的数量。
  DIFFS         :0表示一致,1表示不一致。当指定--no-replicate-check时,会一直为0,当指定--replicate-check-only会显示不同的信息。
  ROWS          :表的行数。
  CHUNKS        :被划分到表中的块的数目。
  SKIPPED       :由于错误或警告或过大,则跳过块的数目。
  TIME          :执行的时间。
  TABLE         :被检查的表名。
 mysql > select * from radius.checksums;

            db: activity
           tbl: t
         chunk:1
    chunk_time:0.001246
   chunk_index:NULL
lower_boundary:NULL
upper_boundary:NULL
      this_crc: 706af48f    #slave
      this_cnt:4           #slave
    master_crc: e963a535    #master
    master_cnt:4           #master                 可以发现表t1中从库比主库多0条记录
            ts:2014-04-13 16:05:16      

个人微博:http://weibo.com/wjrtaojiang,各种优惠券走起!!!

### 如何安装和使用 `pt-table-checksum` 进行 MySQL 主从数据一致性检查 #### 工具简介 `pt-table-checksum` 是 Percona Toolkit 的一部分,旨在高效检测 MySQL 主从复制中的数据不一致问题[^2]。通过计算并比较主从服务器上的校验值来发现差异。 --- #### 安装方法 要安装 `pt-table-checksum`,需先安装整个 Percona Toolkit 套件: 对于基于 Debian/Ubuntu 的系统: ```bash sudo apt-get update sudo apt-get install percona-toolkit ``` 对于基于 RedHat/CentOS 的系统: ```bash sudo yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm sudo yum install percona-toolkit ``` 验证安装成功: ```bash pt-table-checksum --version ``` 如果显示版本号,则说明已正确安装[^1]。 --- #### 使用方法概述 `pt-table-checksum` 默认会自动处理大多数情况下的配置需求。如果有任何不确定的行为,可以使用 `--explain` 参数查看其具体操作逻辑。 基本命令结构如下: ```bash pt-table-checksum [OPTIONS] DSN ``` 其中,DSN (Data Source Name) 表示目标数据库连接信息,通常由主机名 (`h`)、用户名 (`u`) 和密码 (`p`) 组成。 --- #### 示例用法 ##### 1. 检查所有表的一致性 以下命令会在默认情况下扫描所有的数据库及其表,并记录校验结果到专用的日志表中。 ```bash pt-table-checksum --user=root --password=your_password --host=localhost ``` ##### 2. 只检查特定数据库 可以通过 `--databases` 参数指定需要检查的数据库列表。 ```bash pt-table-checksum --user=root --password=your_password --host=localhost --databases=test_db ``` ##### 3. 只检查某些表 结合 `--tables` 或者 `--ignore-tables` 来限定范围。 ```bash pt-table-checksum --user=root --password=your_password --host=localhost --databases=test_db --tables=my_table ``` ##### 4. 跳过二进制日志格式检查 当确认环境支持所需的二进制日志模式时,可禁用此安全检查以减少干扰。 ```bash pt-table-checksum --no-check-binlog-format --user=root --password=your_password --host=localhost ``` ##### 5. 自定义高级行为 利用更多参数调整工具运行方式,比如设置并发线程数或排除大表。 ```bash pt-table-checksum --recursion-method=processlist \ --max-load="Threads_running=25" \ --chunk-size=1000 \ --user=root --password=your_password --host=localhost ``` 上述命令设置了分片大小为 1000 行,并限制负载不超过 25 个活动线程[^3]。 --- #### 输出解释 执行完成后,`pt-table-checksum` 将在校验过程中产生的摘要存储于名为 `percona.checksums` 的特殊表内。随后可通过查询该表定位潜在的数据偏差位置。 例如: ```sql SELECT * FROM percona.checksums WHERE this_crc != master_crc OR this_cnt != master_cnt; ``` 这将返回所有主从间存在差异的条目。 --- #### 注意事项 - **权限要求**:确保所使用的账户具备足够的权限访问相关对象以及创建临时表。 - **性能影响**:尽管设计上力求最小化负担,但在高吞吐量环境下仍可能引发短暂延迟。建议安排在低峰时段运行。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值