安装过程
tar -zxvfpercona-toolkit-3.0.3_x86_64.tar.gz
二进制的包,解压完可以直接进到percona-toolkit-3.0.3/bin目录下使用。
1,pt-online-schema-change
功能可以在线整理表结构,收集碎片,给大表添加字段和索引。避免出现锁表导致阻塞读写的操作。针对 MySQL 5.7 版本,就可以不需要使用这个命令,直接在线 online DDL 就可以了。
表里面数据的情况和表结构
mysql>
select
count(*) from lisi
;
+----------+
| count(*) |
+----------+
| 100000 |
+----------+
1 row
in
set
(0.03 sec)
mysql> desc lisi
;
+-------+------------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+-------------------+-----------------------------+
|
id
| int(10) unsigned | NO | PRI | NULL | auto_increment |
| c1 | int(11) | NO | | 0 | |
| c2 | int(11) | NO | | 0 | |
| c3 | int(11) | NO | | 0 | |
| c4 | int(11) | NO | | 0 | |
| c5 | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| c6 | varchar(200) | NO | | |
在线增加字段的过程:
[root@mysql bin]
# ./pt-online-schema-change --user=root --password=root
--host=localhost --alter=
"ADD COLUMN city_id INT"
D=
test
,t=lisi
--execute
No slaves found. See --recursion-method
if
host node3 has slaves.
Not checking slave lag because no slaves were found and --check-slave-lag was not specified.
Operation, tries, wait:
analyze_table, 10, 1
copy_rows, 10, 0.25
create_triggers, 10, 1
drop_triggers, 10, 1
swap_tables, 10, 1
update_foreign_keys, 10, 1
Altering `
test
`.`lisi
`...
Creating new table...
Created new table
test
._lisi_new OK.
Altering new table...
Altered `
test
`.`_lisi_new` OK.
2017-08-10T14:53:59 Creating triggers...
2017-08-10T14:53:59 Created triggers OK.
2017-08-10T14:53:59 Copying approximately 100163 rows...
2017-08-10T14:54:00 Copied rows OK.
2017-08-10T14:54:00 Analyzing new table...
2017-08-10T14:54:00 Swapping tables...
2017-08-10T14:54:00 Swapped original and new tables OK.
2017-08-10T14:54:00 Dropping old table...
2017-08-10T14:54:00 Dropped old table `
test
`.`_lisi_old` OK.
2017-08-10T14:54:00 Dropping triggers...
2017-08-10T14:54:00 Dropped triggers OK.
Successfully altered `
test
`.`lisi
`.
查看结果新增了一个 city_id 的字段:
|
功能:现在捕获线上TOP 10 慢 sql 语句。
如下:
可以根据时间间隔,来采样慢 sql 语句。since 是可以调整的 sql 语句
[root@node3 bin]
# ./pt-query-digest --since=24h /data/mysql/slow.log > 1.log
查看 sql 报告,总结慢语句有哪些,并可以看针对时间的消耗。
cat 1.log
可以看到报告中,列举出了一些sql语句响应时间占比情况,和sql语句的执行时间情况。方便我们可以很直观的观察哪些语句有问题。(这里只列举了一条sql)
3,pt-heartbeat
功能监控主从延迟。监控从库落后主库大概多少时间。
4,pt-table-checksum
功能检查主从复制一致性
原理:在主上执行检查语句去检查 mysql主从复制的一致性,生成 replace 语句,然后通过复制传递到从库,再通过update 更新 master_src 的值。最后通过检测从上 this_src 和 master_src 的值从而判断复制是否一致。
5,pt-slave-restart
功能:监控主从错误,并尝试重启MySQL主从
注意事项:跳过错误这个命令,解决从库多数据的现象(错误代码1062)。如果从库少数据,还跳过错误,就不能从根儿上解决主从同步的问题了(错误代码1032),就需要先找到缺少的数据是什么了,如果缺少的特别多,建议重新搭建主从环境。
从库出现1062的错误:
Slave_IO_Running: Yes
Slave_SQL_Running: No
Last_Errno: 1062
Last_Error: Could not execute Write_rows event on table
test
.t;
Duplicate entry
'1'
for
key
'PRIMARY'
,
Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY;
the event's master log mysql-bin.000006, end_log_pos 757482
需要在从库上面执行:
|
跳过错误之后,检查主从结果:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
同步状态又恢复一致了。
6,pt-ioprofile
功能:方便定位IO问题,可通过IO吞吐量来定位。
[root@node3 bin]
# ./pt-ioprofile
Thu Aug 10 16:33:47 CST 2017
Tracing process ID 3907
total
read
pwrite write fsync filename
13.949355 0.839006 0.000000 0.286556 12.823793 /data/mysql/mysql-bin.000006
7.454844 0.000000 2.913702 0.000000 4.541142 /data/mysql/ib_logfile0
0.000193 0.000000 0.000000 0.000193 0.000000 /data/mysql/slow.log
read:从文件中读出数据。要读取的文件用文件描述符标识,数据读入一个事先定义好的缓冲区。
write:把缓冲区的数据写入文件中。
pread:由于lseek和read调用之间,内核可能会临时挂起进程,所以对同步问题造成了问题,调用pread相当于顺序调用了lseek和read,这两个操作相当于一个捆绑的原子操作。
pwrite:由于lseek和write调用之间,内核可能会临时挂起进程,所以对同步问题造成了问题,调用pwrite相当于顺序调用了lseek 和write,这两个操作相当于一个捆绑的原子操作。
fsync:确保文件所有已修改的内容已经正确同步到硬盘上,该调用会阻塞等待直到设备报告IO完成。
filename:与磁盘交互的文件名称
通过这个报告我们可以看到,哪个文件占用IO的时
间比较多,跟磁盘交互最为繁忙,便于锁定IO问题。
更多的percona-toolkit工具的使用请见官方网站:
https://www.percona.com/doc/percona-toolkit/LATEST/index.html