percona toolkit 更新至一致性检查
percona toolkit 安装
依赖
yum install per-DBD-MySQL perl-DBD-MySQL perl-IO-Socket-SSL perl-Time-HiRes perl-TermReadKey
下载安装
安装软件(主库,最好主从都安装)
rpm -ivh percona-toolkit-3.0.12-1.el6.x86_64.rpm
权限(主库从库)
GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE,CREATE,DELETE,INSERT,UPDATE ON *.* TO 'check'@'X.X.X.%' identified by 'XXXX';
1、一致性检查工具 pt-table-checksum pt-table-sync
1.1 问题
主从replication
一个比较容易遇到的错误
show slave status
Duplicate entry '2' for key 'PRIMARY', Error_code: 1062
常用处理方法
检查/删除从库冗余数据,重新由replication操作。
或者确认从库数据与主库一致,直接set global sql_slave_skip_counter=1 并重启stop slave;start slave (skip并不检查一致性,只考虑rely log是否未报错 )
由于过多skip人为因素、statement复制模式带来的语句操作差异,等,数据库主从可能处于不一致状态
1.2 问题复现
测试
从库添加2 主库添加2和3
show slave status
Seconds_Behind_Master: NULL
Last_SQL_Error: Could not execute Write_rows event on table test.t1; Duplicate entry '2' for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log mysql50-bin.000001, end_log_pos 1077
从库skip
set global sql_slave_skip_counter=1
并重新启动slave
stop slave
start slave
从库数据
由于操作不严谨,导致主从数据不一致。此时slave状态是正常的。
1.3 一致性检查工具pt-table-checksum
在主库上检查
可以不加--databases --tables项全表扫描
pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=percona.checksum --create-replicate-table --databases=test --tables=t1 h=10.27.X.X,u=check,p=XXXXXXXXX,P=3306
当slave异常时
当主从数据不一致时
1.4 修复工具pt-table-sync
仅检查库表数据,不检查结构、索引等
在主库上执行
pt-table-sync --replicate=percona.checksum h=主库ip,u=check,p=xxx h=从库ip,u=check,p=XXXX--print
提示操作方法
或者直接--exec 自动修复
原测试用不一致的 2 2 变成2 222
2 slowlog 工具pt-query-digest
./pt-query-digest slow.log >digest.log
另另可加上各种参数辅助
如分析最近12小时内的查询:
pt-query-digest --since=12h slow.log > slow_report2.log
3信息检查 pt-mysql-summary