解决方案
Version 3.0.2
Percona Toolkit 集合了一系列的命令,这些命令用于 MySQL 和系统任务,主要用于处理“手动执行难度大”的各种 MySQL 和系统任务相关问题;
这里面的一些工具都是专业的开发、经过正式测试的、文档完整的工具;
Percona Toolkit 衍生自 Maatkit 和 Aspersa;
提供了如下功能
- 验证主副本数据的一致性;
- 有效地存档行;
- 查找重复的索引;
- 总结 MySQL 服务器;
- 从日志和 tcpdump 分析查询;
- 在发生问题时收集重要的系统信息;
安装笔记
Percona Toolkit 3.2.0 on CentOS 7.4
Configuring Percona Repositories with percona-release
Installing Percona Toolkit
# 添加仓库 yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm # 执行安装 yum install percona-toolkit-3.2.0
通过编译安装
下载的话可以去官网下载Percona Toolkit
可以查看官方的安装教程。
源码目录中的INSTALL文件也包含了安装方法,以下内容摘自INSTALL文件,更多内容参阅源码目录下的INSTALL文件:
系统环境要求及相关依赖
Most tools require:
* Perl v5.8 or newer
* Bash v3 or newer
* Core Perl modules like Time::HiRes
Tools that connect to MySQL require:
* Perl modules DBI and DBD::mysql
* MySQL 5.0 or newer
构建及安装
tar zxvf percona‐toolkit‐<version>.tar.gz cd percona‐toolkit‐<version> # perl Makefile.PL PREFIX=${HOME},PREFIX指定安装路径,默认为/usr/local perl Makefile.PL make # 测试 make test make install
在使用工具前,需要阅读的文档
如何指定 DSN 参数:DSN (DATA SOURCE NAME) SPECIFICATIONS
控制工具行为的环境变量:ENVIRONMENT
命令简介
Percona Toolkit Homepage
Manual Download
Online Percona Toolkit Documentation
Other software: http://www.percona.com/software/
这些工具都是由 Perl 语言写的。如果要查看手册,除了在线手册和 man 之外,还有使用 perldoc 命令。
比如,要查看 pt-table-sync 的帮助手册:
perldoc pt-table-sync # 如果你的发行版里没有安装 perl-doc 软件包,需要安装一下;
以下是命令列表及命令的作用:
pt-pmp,为指定程序执行聚合 GDB 堆栈跟踪;
pt-online-schema-change,不锁表执行 ALTER 操作;
pt-align,将其他 pt-*命令的输出对齐到列头;
pt-config-diff,比较 MySQL 配置文件和服务器变量;
pt-sift,浏览 pt-stalk 创建的文件;
pt-visual-explain,将 EXPLAIN 输出格式化为树形;
pt-mext,并列查看 MySQL 的“SHOW GLOBAL STATUS”的许多示例;
pt-query-digest,从查询日志、进程列表、tcpdump 中分析 MySQL 的查询;
pt-table-sync,用于有效地同步 MySQL 中表数据;
pt-mysql-summary,已友好的方式汇总 MySQL 的信息;
pt-ioprofile,监视进程 IO 并打印文件和 I/O 活动的表格;
pt-diskstats,交互式的 I/O 监控工具;
pt-archiver,将 MySQL 表中的行存档到另一个表或文件;
pt-deadlock-logger,记录 MySQL 中的死锁;
pt-stalk,在发生问题时,收集关于 MySQL 的取证数据;
pt-show-grants,规范和打印 MySQL 授权信息,以便可以有效地复制、比较、版本控制
pt-summary,以友好的方式,总述系统中的信息;
pt-fifo-split,将文件和管道分割成 fifo,而不会真正分裂;
pt-table-usage,分析查询是如何使用表的;
pt-fk-error-logger,记录 MySQL 中的外键错误;
pt-fingerprint,将查询转换成指纹;
pt-kill,杀死符合特定条件的 MySQL 查询;
pt-find,查找 MySQL 表并执行动作,非常像 find 命令;
pt-variable-advisor,分析 MySQL 变量,并就可能出现的问题提供建议;
pt-table-checksum,验证 MySQL 复制完整性;
与「索引」有关的命令
pt-index-usage,读取查询日志,然后对日志中的 SQL 执行 EXPLAIN,输出索引的使用情况;
pt-duplicate-key-checker,分析表结构,找到重复和冗余的索引以及外键;
pt-upgrade,验证不同服务器上的查询结果是否相同。用于检查计划中的索引变更;
与「主从复制」有关的命令
pt-slave-delay,使 MySQL Slave 落后于 Master
pt-slave-find,查找并打印 MySQL Slave 的复制层次结构树;
pt-slave-restart,监控 MySQL 多台服务器的复制错误。MySQL 发生错误之后,会尝试重新启动;
pt-heartbeat,监视 MySQL 复制延迟;
pt-table-checksum – 验证复制一致性
原理及特性:
1)使用 REPLACE..SELECT 查询,计算 CRC 来检查数据一致性(使用 pt-table-checksum –explain 查看细节);
2)根据索引(或主键)将数据分为多个快。如果数据表不包含索引,并且包含少量数据,该工具将表作为单个块进行检查;
注意事项:
1)由于检查以块为单位,只有当行数相同但校验和不同时,才能断定存在内容不一致的行;
pt-table-sync – 在表间同步数据
原理及特性:
1)在主库上执行差异语句(不改变数据),然后利用主从复制实现数据同步到从库;
注意事项:
1)同步之前,应该使用 –dry-run 以及 –print 进行测试;
2)该工具不会同步表结构、索引等对象;
pt-heartbeat – 检测复制延迟
原理及特性:
1)在主库中插入数据,并在数据中记录插入时间戳;
2)在从库中读取数据,将时间戳与当前系统时间对比