pt工具的使用(5) pt-table-checksum的使用

pt-table-checksum是一个用于在线复制的MySQL工具,用于检查主从数据一致性。它通过在主库上执行校验和查询并在从库上对比结果来检测差异。工具支持多种配置选项,如指定校验和函数、分块大小、递归方法等,还能够处理单机多实例情况。在执行过程中,会记录校验和信息到指定表,并在发现差异时给出提示。此外,还能通过--replicate选项同步校验和信息到从库。

一、用途

pt-table-checksum通过在 master 上执行校验和查询来执行在线复制一致性检查,这会在与 master 不一致的副本上产生不同的结果。可选的 DSN 指定主控主机。如果发现任何差异,或者出现任何警告或错误,则该工具的“退出状态”为非零值,该工具专注于有效地查找数据差异。如果有任何数据不同,您可以使用 pt-table-sync 解决问题。

二、基本使用

1.使用示例

pt-table-checksum h='host',u='user',p='password',P=port   --nocheck-replication-filters --replicate=test.checksums  --recursion-method=hosts --no-check-binlog-format

ps: recursion-method:因为我配置了单机多实例,从库端口为3307,processlist找不到从库,这时候就需要使用host或者dsn,
使用host则需要修改从库的配置

[mysqld]
report-host = *******
report-port = 3307

dsn用法:

--recursion-method dsn=h=host,D=percona,t=dsns
CREATE TABLE `dsns` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `parent_id` int(11) DEFAULT NULL,
  `dsn` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
);
# dsn字段的内容:"h=replica_host,u=repl_user,p=repl_pass"

2.从库全局日志

2021-09-26T03:33:55.478992Z	    8 Query	SHOW TABLES FROM `test_1` LIKE 'a'
2021-09-26T03:33:55.488784Z	    8 Query	/*!40101 SET @OLD_SQL_MODE := @@SQL_MODE, @@SQL_MODE := '', @OLD_QUOTE := @@SQL_QUOTE_SHOW_CREATE, @@SQL_QUOTE_SHOW_CREATE := 1 */
2021-09-26T03:33:55.497333Z	    8 Query	USE `test_1`
### 如何安装和使用 `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、付费专栏及课程。

余额充值