简介:今天咱们来聊聊PT校验工具pt-table-checksum
注意事项:
1、 根据测试,需要一个即能登录主库,也能登录从库的账号;
2、 只能指定一个host,必须为主库的IP;
3、 在检查时会向表加S锁;
4、 如果master和slave的binlog日志不是STATEMENT格式,要用--no-check-binlog-format选项
5、 运行之前需要从库的同步IO和SQL进程是YES状态。
6、 表要有主键索引或唯一键索引
用户权限
GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE ON *.* TO 'god'@'%' IDENTIFIED BY 'god';//需要检验的表
GRANT ALL PRIVILEGES ON test.* TO 'god'@'10.255.%' IDENTIFIED BY 'god';//对checksum表的生成
相关问题
1 对于相关从库发现的方法
如果要对所有从库做校验并且从库端口都是3306直接采用processlist即可
否则采用dsns方法
1 建立相关表
CREATE TABLE `dsns` ( `id` int(11) NOT NULL AUTO_INCREMENT, `parent_id` int(11) DEFAULT NULL, `dsn` varchar(255) NOT NULL, PRIMARY KEY (`id`) );
2 插入从库信息
INSERT INTO dsns (parent_id,dsn) values(1, "h=从库IP,u=root,p=XX,P=3306");依次类推
3 生成语句指定
-recursion-method=dsn=h=IP,D=test,t=dsns
2 相关报错
Waiting for the --replicate table to replicate to 表示从库延迟严重,没有相关checksums表
connect not to 表示连接不到从库,可能是从库端口有问题,按照上述方式解决
Pausing because Threads_running 表示主库负载太高,可以调大load值或者等待负载降低
3 正则匹配
--databases-regex=d_ts.* 匹配d_ts的表
4 对线上的影响
这个是很多人都关心的问题,首先它对表增加的是S锁 其次它是按照chunk为单位检测的 最后pt工具一些针对主库负载都有警告限制,如果超过这个阈值,就会暂停任务
常用命令范式
1 pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=test.checksums --recursion-method=dsn=h=主库IP,D=test,t=dsns --databases=db --tables=table h=主库IP,u=god,p=god,P=3306
2 pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=test.checksums --recursion-method=processlist --databases=db --tables=table h=主库IP,u=god,p=god,P=3306