06_pt-table-sync 工具解决 MySQL 主从数据不一致
06_pt-table-sync 工具解决 MySQL 主从数据不一致
pt-table-sync
是 Percona Toolkit 中用于修复 MySQL 主从数据不一致的同步工具。
一、准备工作
1. 安装 Percona Toolkit
# 安装 Perl 依赖环境(以 CentOS/RHEL 为例)
yum install -y perl-ExtUtils-CBuilder perl-CPAN perl-devel gcc make perl-DBI perl-DBD-MySQL# 下载 Percona Toolkit 源码
git clone https://github.com/percona/percona-toolkit.git# 编译安装
cd percona-toolkit
perl Makefile.PL
make && make install
如果执行
pt-query-digest --help
出错提示缺少模块Digest/MD5.pm
,执行:bash复制编辑 yum install perl-Digest-MD5 -y
2. 创建 pt_user 用户及权限
建议在主库和从库都创建 pt_user
用户,并赋予必要权限:
CREATE USER 'pt_user'@'%' IDENTIFIED BY '123456';GRANT SELECT, PROCESS, REPLICATION SLAVE, REPLICATION CLIENT, SUPER ON *.* TO 'pt_user'@'%';
GRANT REPLICATION CLIENT ON *.* TO 'pt_user'@'%';FLUSH PRIVILEGES;
二、pt-table-checksum 使用要求及说明
1. 主库必须启用 binlog,且 binlog_format 为 ROW
因为 pt-table-checksum 依赖 binlog 来将校验 SQL 同步到从库。
2. 从库信息必须对主库可见
- 从库必须正常运行复制线程(
SHOW SLAVE STATUS\G
中Slave_IO_Running
和Slave_SQL_Running
为Yes
) - 主库能通过
SHOW SLAVE HOSTS;
命令看到从库信息(包含Server_id
、Host
、Port
)
3. pt-table-checksum 发现从库的方式
- 默认通过主库
processlist
查找复制连接 - 或者通过
SHOW SLAVE HOSTS
查找,从库必须正确配置report_host
和report_port
变量
4. 如果主库可以发现从库,且 pt_user 权限充足,使用以下命令即可校验:
pt-table-checksum \--user=pt_user \--password='123456' \--host=主库IP \--port=主库端口 \--databases=数据库名 \--replicate=percona.checksums \--no-check-binlog-format \--no-check-replication-filters \--recursion-method=processlist
5. 如果无法自动发现从库(比如 SHOW SLAVE HOSTS
无从库记录,或者从库信息不可达),可用 --recursion-method=dsn
手动指定从库 DSN(主从库均需有对应 pt_user 用户和权限):
pt-table-checksum \--user=pt_user \--password='123456' \--host=主库IP \--port=主库端口 \--databases=数据库名 \--replicate=percona.checksums \--no-check-binlog-format \--no-check-replication-filters \--recursion-method=dsn=h=从库IP,P=从库端口,u=pt_user,p=123456
三、pt_user 对 percona 库的权限(存储校验结果)
pt-table-checksum 默认会在主库创建一个名为 percona
的库和 checksums
表,用于存储校验结果。
请确保 pt_user 有权限创建和操作该库:
CREATE DATABASE IF NOT EXISTS percona;GRANT ALL PRIVILEGES ON percona.* TO 'pt_user'@'%';FLUSH PRIVILEGES;
四、总结
- 确保主库 binlog 格式为 ROW,复制正常
- 确保主从库
pt_user
用户权限完整 - 确保主库能通过
SHOW SLAVE HOSTS
或复制连接发现从库 - 使用
pt-table-checksum
校验数据一致性 - 如需修复不一致,使用
pt-table-sync
(需同时连接主从库)