首页 数据库

1. percona-toolkit介绍

percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql和系统任务,这些任务包括:

  • 检查master和slave数据的一致性;
  • 有效地对记录进行归档;
  • 查找重复的索引;
  • 对服务器信息进行汇总;
  • 分析来自日志和tcpdump的查询;
  • 当系统出问题的时候收集重要的系统信息。

percona-toolkit源自Maatkit 和Aspersa工具,这两个工具是管理mysql的最有名的工具,现在Maatkit工具已经不维护了,请大家还是使用percona-toolkit吧!这些工具主要包括开发、性能、配置、监控、复制、系统、实用六大类,作为一个优秀的DBA,里面有的工具非常有用,如果能掌握并加以灵活应用,将能极大的提高工作效率。

2. 安装

wget https://www.percona.com/redir/downloads/percona-release/redhat/1.0-13/percona-release-1.0-13.noarch.rpm
sudo rpm -ivh percona-release-1.0-13.noarch.rpm
sudo yum makecache
sudo yum install percona-toolkit -y

3. 工具简要说明

  • /usr/bin/pt-align # 对齐其他工具的输出,pt2.2新增命令
  • /usr/bin/pt-archiver # 将表数据归档到另一个表或文件中
  • /usr/bin/pt-config-diff # 比较配置文件和参数
  • /usr/bin/pt-deadlock-logger # 提取和记录mysql死锁信息
  • /usr/bin/pt-diskstats # 查看系统磁盘状态
  • /usr/bin/pt-duplicate-key-checker # 列出并删除重复的索引和外键
  • /usr/bin/pt-fifo-split # 模拟切割文件并输出
  • /usr/bin/pt-find # 查找表并执行命令
  • /usr/bin/pt-fingerprint # 将查询转成密文,pt2.2新增命令
  • /usr/bin/pt-fk-error-logger # 提取和记录外键信息
  • /usr/bin/pt-heartbeat # 监控mysql复制延迟
  • /usr/bin/pt-index-usage # 分析日志中索引使用情况,并出报告
  • /usr/bin/pt-ioprofile # 查询进程IO并打印一个IO活动表,pt2.2新增命令
  • /usr/bin/pt-kill # Kill掉符合条件的sql常用命令
  • /usr/bin/pt-mext # 并行查看status样本信息
  • /usr/bin/pt-mongodb-query-digest #
  • /usr/bin/pt-mongodb-summary #
  • /usr/bin/pt-mysql-summary # 对mysql配置和status进行汇总
  • /usr/bin/pt-online-schema-change # 在线修改表结构
  • /usr/bin/pt-pg-summary #
  • /usr/bin/pt-pmp # 为查询结果跟踪,并汇总跟踪结果
  • /usr/bin/pt-query-digest # 分析查询日志,并产生报告常用命令
  • /usr/bin/pt-secure-collect #
  • /usr/bin/pt-show-grants # 规范化和打印权限
  • /usr/bin/pt-sift # 浏览由pt-stalk创建的文件,pt2.2新增命令
  • /usr/bin/pt-slave-delay # 设定从落后主的时间
  • /usr/bin/pt-slave-find # 查找和打印所有mysql复制层级关系
  • /usr/bin/pt-slave-restart # 监控salve错误,并尝试重启salve
  • /usr/bin/pt-stalk # 出现问题时,收集诊断数据
  • /usr/bin/pt-summary # 收集和显示系统概况
  • /usr/bin/pt-table-checksum # 校验主从复制一致性
  • /usr/bin/pt-table-sync # 高效同步表数据
  • /usr/bin/pt-table-usage # 分析日志中查询并分析表使用情况,pt2.2新增命令
  • /usr/bin/pt-upgrade # 在多个服务器上执行查询,并比较不同
  • /usr/bin/pt-variable-advisor # 分析参数,并提出建议
  • /usr/bin/pt-visual-explain # 格式化执行计划

4. 部分工具参数说明

4.1 pt-table-checksum常用参数

  • --nocheck-replication-filters :不检查复制过滤器,建议启用。后面可以用--databases来指定需要检查的数据库。
  • --no-check-binlog-format : 不检查复制的binlog模式,要是binlog模式是ROW,则会报错。
  • --replicate-check-only :只显示不同步的信息。
  • --replicate= :把checksum的信息写入到指定表中,建议直接写到被检查的数据库当中。
  • --databases= :指定需要被检查的数据库,多个则用逗号隔开。
  • --tables= :指定需要被检查的表,多个用逗号隔开
  • h= :Master的地址
  • u= :用户名
  • p=:密码
  • P= :端口

4.2 pt-table-sync常用参数

  • --replicate= :指定通过pt-table-checksum得到的表,这2个工具差不多都会一直用
  • --databases= : 指定执行同步的数据库
  • --tables= :指定执行同步的表,多个用逗号隔开
  • --sync-to-master :指定一个DNS,即从的IP,他会通过show processlist或show slave status 去自动的找主
  • h= :服务器地址,命令里有2个ip,第一次出现的是Master的地址,第2次是Slave的地址
  • u= :帐号
  • p= :密码
  • --print :打印,但不执行命令
  • --execute :执行命令

4.3 pt-hearbeat常用参数

注意:需要指定的参数至少有 --stop,--update,--monitor,--check。
其中--update,--monitor和--check是互斥的,--daemonize和--check也是互斥。

  • --ask-pass 隐式输入MySQL密码
  • --charset 字符集设置
  • --check 检查从的延迟,检查一次就退出,除非指定了--recurse会递归的检查所有的从服务器。
  • --check-read-only 如果从服务器开启了只读模式,该工具会跳过任何插入。
  • --create-table 在主上创建心跳监控的表,如果该表不存在,可以自己手动建立,建议存储引擎改成memory。通过更新该表知道主从延迟的差距。
  • heratbeat 表一直在更改ts和position,而ts是我们检查复制延迟的关键。
  • --daemonize 执行时,放入到后台执行
  • --user=-u, 连接数据库的帐号
  • --database=-D, 连接数据库的名称
  • --host=-h, 连接的数据库地址
  • --password=-p, 连接数据库的密码
  • --port=-P, 连接数据库的端口
  • --socket=-S, 连接数据库的套接字文件
  • --file 【--file=output.txt】 打印--monitor最新的记录到指定的文件,很好的防止满屏幕都是数据的烦恼。
  • --frames 【--frames=1m,2m,3m】 在--monitor里输出的[]里的记录段,默认是1m,5m,15m。可以指定1个,如:--frames=1s,多个用逗号隔开。可用单位有秒(s)、分钟(m)、小时(h)、天(d)。
  • --interval 检查、更新的间隔时间。默认是见是1s。最小的单位是0.01s,最大精度为小数点后两位,因此0.015将调整至0.02。
  • --log 开启daemonized模式的所有日志将会被打印到制定的文件中。
  • --monitor 持续监控从的延迟情况。通过--interval指定的间隔时间,打印出从的延迟信息,通过--file则可以把这些信息打印到指定的文件。
  • --master-server-id 指定主的server_id,若没有指定则该工具会连到主上查找其server_id。
  • --print-master-server-id 在--monitor和--check 模式下,指定该参数则打印出主的server_id。
  • --recurse 多级复制的检查深度。模式M-S-S...不是最后的一个从都需要开启log_slave_updates,这样才能检查到。
  • --recursion-method 指定复制检查的方式,默认为processlist,hosts。
  • --update 更新主上的心跳表。
  • --replace 使用--replace代替--update模式更新心跳表里的时间字段,这样的好处是不用管表里是否有行。
  • --stop 停止运行该工具(--daemonize),在/tmp/目录下创建一个“pt-heartbeat-sentinel” 文件。后面想重新开启则需要把该临时文件删除,才能开启(--daemonize)。
  • --table 指定心跳表名,默认heartbeat。

5. 示例

5.1 创建检查用户并授权

GRANT ALL PRIVILEGES ON *.* TO 'checkuser'@'192.168.0.%' identified by 'check123';
or:
GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE, CREATE, DELETE, INSERT, UPDATE ON *.* TO 'checkuser'@'192.168.0.%' identified by 'check123';
FLUSH PRIVILEGES;
CREATE DATABASE `tb_check`;

5.2 检查主从数据一致性

/usr/bin/pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=tb_check.checksums  --databases=emm_uusafe,uusafe-core h=192.168.0.205,u=checkuser,p=check123,P=3306

5.3 同步主从数据

/usr/bin/pt-table-sync --replicate=tb_check.checksums h=192.168.0.205,u=checkuser,p=check123 h=192.168.0.206,u=checkuser,p=check123 --print
/usr/bin/pt-table-sync --replicate=tb_check.checksums h=192.168.0.205,u=checkuser,p=check123 h=192.168.0.206,u=checkuser,p=check123 --execute

5.4 脚本示例

#!/bin/bash
NUM=$(/usr/bin/pt-table-checksum --nocheck-replication-filters --no-check-binlog-format --replicate=tb_check.checksums  --databases=emm_uusafe h=192.168.0.205,u=checkuser,p=check123,P=3306 | awk 'NR>3{sum+=$3}END{print sum}')
if [ $NUM -eq 0 ];then
    echo "[$(date "+%FT%T")] Data is ok!" >> /tmp/check_mysql.log
else
    echo "[$(date "+%FT%T")] Data is error!" >> /tmp/check_mysql.log
    /usr/bin/pt-table-sync --replicate=tb_check.checksums h=192.168.0.205,u=checkuser,p=check123 h=192.168.0.206,u=checkuser,p=check123 --print
    /usr/bin/pt-table-sync --replicate=tb_check.checksums h=192.168.0.205,u=checkuser,p=check123 h=192.168.0.206,u=checkuser,p=check123 --execute
fi



文章评论

目录