需要注意的是:master和slave需要相同的账号:
GRANT SELECT,PROCESS,SUPER,REPLICATION SLAVE,Lock_tables,Insert_priv='Y',Delete_priv='Y' ON *.* TO 'ptuser'@'%' IDENTIFIED BY'123456';
flush privileges;
3.mysql服务状态摘要:pt-mysql-summary
通过连接到MySQL数据库服务器并向其查询状态和配置信息来工作
简单参数:
--user #数据库的用户名,简写:-u
--password #数据库的密码,简写:-p
--host #非本地数据库的IP地址,简写:-h
--port #数据库的端口号,简写:-P,默认3306
--databases或--all-databases,则该工具将打印以上部分。这总结了数据库中对象的数量和类型
--save-samples 文件名 #用于保存的文件
--sleep 10 #收集状态计数器(Status Counters)时需要睡眠的秒数。默认10s
4.慢查询分析: pt-query-digest
用于分析mysql服务器的慢查询日志,常规日志和二进制日志的查询,tcpdump的MySQL协议数据,并格式化输出以便于查看和分析
简单参数:
--since 从什么时间点开始分析
--until 截止时间点
--user 用户名,--password 密码, -host 主机ip
--review 所有唯一查询都将保存到数据库。当再次使用运行该工具时--review,该报表中不会打印在数据库中标记为已审阅的查询。这突出显示了需要审查的新查询
--history 将每个唯一查询的查询指标(查询时间,锁定时间等)都将保存到数据库中,每次使用该工具时--history,如果存在相同的语句,且查询所在的时间区间和历史表中的不同,则会记录到数据表中,可以通过查询同一CHECKSUM来比较某类型查询的历史变化
--create-review-table 当使用--review参数把分析结果输出到表中时,如果没有表就自动创建。
--create-history-table 当使用--history参数把分析结果输出到表中时,如果没有表就自动创建。
--limit 限制输出结果百分比或数量,默认值是20和95%,即将最慢的20条语句输出,如果是95%则按总响应时间占比从大到小排序,输出到总和达到95%位置截止
--filter 对输入的慢查询按指定的字符串进行匹配过滤后再进行分析
默认--output值为查询分析报告。该--[no]report 选项控制是否打印此报告
--type 要解析的输入的类型,默认slowlog,还有binlog日志(该文件首先使用mysqlbinlog转换为文本),genlog(解析MySQL一般日志文件),tcpdump(检查网络数据包并解码MySQL客户端协议,从中提取查询和响应),rawlog(简单文本)
执行命令:
1)分析指定时间范围内的查询
pt-query-digest slow.log --since'2017-01-07 09:30:00'--until'2017-01-0710:00:00'
2)把查询保存到query_review表:
pt-query-digest --user=root –password=abc123 --review h=localhost,D=test,t=query_review --create-review-table slow.log
3)把查询保存到query_history表
pt-query-digest --user=root –password=abc123 --review h=localhost,D=test,t=query_history--create-review-table slow.log_0001
4)分析binlog
mysqlbinlog mysql-bin.000093> mysql-bin000093.sql
pt-query-digest --type=binlog mysql-bin000093.sql > slow_report10.log
5.查找并打印MySQL从站的复制层次结构树 pt-slave-find (在master上操作)
此处需要主从账号密码必须一致且可以远程连接
在master上执行命令可查看出slave的层次结构
简单参数:
-h 主机ip , -P 端口号 -u 用户名 -p密码 -D 指定数据库
--charset utf8 #指定字符集
--defaults-file /etc/my.cnf #只从给定文件中读取mysql选项。必须提供一个绝对路径名
--resolve-address 将ip地址解析为主机名
--slave-user 设置slave的用户名称
--slave-password 设置用于连接到从站的密码
pt-slave-find -h192.168.11.203 -P3306 -uptuser -p123456
6.规范化打印MySQL用户权限 pt-show-grants
pt-show-grants -uroot -p123456
7.对比配置文件的异同 pt-config-diff (使用DSN格式)
1)两个数据库配置文件比较:
./pt-config-diff h=localhost,P=3306,u=root,p=123456 h=localhost1,P=3306,u=root,p=123456
2)指定文件:
./pt-config-diff /opt/my.cnf h=localhost,P=3306,u=root,p=123456
8.pt-archiver 将MySQL表中的记录存档到另一个表或文件中,原表只保留最近一行,其他记录都会清除
1)归档文件并且复制到相应的表中
./pt-archiver --source h=localhost,P=2206,u=root,p=123456,D=test,t=info --file '/tmp/info' --dest h=localhost,u=root,p=123456,D=test,t=info_bak --where "id > 2" --limit 10 --commit-each --no-check-charset --no-version-check
简单参数:
#h=localhost -- 实例地址
# P=3306 -- 实例端口
# u=root -- 实例用户
# p=123456 -- 实例用户密码
# D=test -- 实例数据库
# t=info -- 实例表名称
# --source -- 指定要被归档的数据源
#--dest -- 指定要被归档的目的源
# --charset=utf8 -- 使用的字符集,需与表字符集一致;
#--no-check-charset --否则指定字符集
# --file -- 指定目标操作系统文件名
# --where "id > 3008" -- 指定 where 过滤条件,过滤出要归档的数据
# --limit 1000 -- 每条语句读取和归档的数据行数,默认是 1
# --no-version-check -- 不做版本检查,RDS MySQL 必须设置
# --statistics -- 显示 pt-archiver 本次操作的统计信息
# --bulk-insert -- 批量插入数据,会自动启用,每次删除行数通过--limit 选项指定
# --bulk-delete --批量删除数据,每次删除行数通过--limit 选项指定
# --commit-each -- 每次获取和归档数据后,commit提交
#--purge --删除source数据库的相关匹配记录
#--delete --表示不删除原来的数据,注意:如果不指定此参数,所有处理完成后,都会清理原表中的数据
#--txn-size 1000 --设置1000行为一个事务提交一次
2)注意事项:
至少指定–dest, –file 或者 –purge三个参数中的一个
–ignore and –replace 不能同时指定
–txn-size and –commit-each 不能同时指定
–low-priority-insert and –delayed-insert 不能同时指定
–share-lock and –for-update 不能同时指定
–analyze and –optimize 不能同时指定
–no-ascend and –no-delete 不能同时指定
默认情况下,–dest从–source中复制DSN字符串.即,在同一个MySQL Server上面把数据归档到另外一个表.
3)会将选中的数据(不包括最后一条数据,其他数据)进行操作
9.pt-table-checksum ---> 可以用来检测主、 从数据库中数据的一致性
原理: 在master上操作, 对同步的表进行checksum, 记录下来。 然后对比主从中各个表的checksum是否一致, 从而判断数据是否一致。
简单参数:
--database= #指定数据库,如果不指定的话则是全库检查
--tables= 指定需要被检查的表,多个用逗号隔开
--host 主机ip --port 端口号 -u用户名 -p密码 => h=ip,P=端口号,u=用户名,p=密码,s=socket文件
--nocheck-binlog-format 不检查日志格式,默认会去检查statement模式
--nocheck-replication-filters 不检查复制过滤器,建议启用
--replicate-check-only 只输出不一样的表
--nocheck-plan 检查 query的执行计划(优先选择能够对表进行chunk 分组的索引)
--set-varsinnodb_lock_wait_timeout=120 锁的超时设定, 默认为1
--max-load=25 默认数据库正在运行的线程数25,可以调大
--chunk-size, --chunk-size-limit 用于指定检测块的大小。 可控性更强
--recursion-method=processlist
其参数有四:processlist/hosts/dsn=DSN/no,用来决定查找slave的方式
是show full processlist还是show slave hosts(如果找不到的话,需要从slave配置文件中添加report_host=slave_ip和report_port=slave_port,重新启动)还是命令行直接指定还是压根就不准备找从库
--create-replicate-table #创建复制表
--replicate=test.checksums #指定差异性表存放数据库和表名
注意:如果test没有主从,可以将主上面的checksums创建到slave上
为了保证主数据库服务的安全,该工具实现了许多保护措施:
1)自动设置 innodb_lock_wait_timeout 为1s,避免引起
2)默认当数据库有25个以上的并发查询时,pt-table-checksum会暂停。可以设置 --max-load 选项来设置这个阀值
3)当用 Ctrl+C 停止任务后,工具会正常的完成当前 chunk 检测,下次使用 --resume 选项启动可以恢复继续下一个 chunk
参数说明:
TS :完成检查的时间。
ERRORS :检查时候发生错误和警告的数量。
DIFFS :0表示一致,1表示不一致。当指定--no-replicate-check时,会一直为0,当指定--replicate-check-only会显示不同的信息。
ROWS :当前服务器上表的行数。
DIFF_ROW: 主从存在不一样的行数
CHUNKS :被划分到表中的块的数目。
SKIPPED :由于错误或警告或过大,则跳过块的数目。
TIME :执行的时间。TABLE :被检查的表名。
查看slave中的checksums表中的信息:
注意:要是表中没有唯一索引或则主键则会报错:
Can't make changes on the master because no unique index exists at/usr/local/bin/pt-table-sync line10591.
10.恢复数据:pt-table-sync
简单参数:
--print 每次修复前,需要用户确认;
--execute 执行查询,使表具有相同数据;
--verbose 输出明细
--sync-to-master 指定一个DSN,即从的IP,它会通过show processlist或show slave status 去自动的找主。
命令大全:https://www.percona.com/doc/percona-toolkit/2.2/index.html