时间:2021-07-01 10:21:17 帮助过:23人阅读
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | mysql> use test;Database changedmysql> CREATE TABLE query_review (    ->    checksum     BIGINT UNSIGNED NOT NULL PRIMARY KEY,    ->    fingerprint  TEXT NOT NULL,    ->    sample       TEXT NOT NULL,    ->    first_seen   DATETIME,    ->    last_seen    DATETIME,    ->    reviewed_by  VARCHAR(20),    ->    reviewed_on  DATETIME,    ->    comments     TEXT    -> );Query OK, 0 rows affected (0.02 sec) mysql> select* from query_review;Empty set(0.00 sec) [root@master-server ~]# pt-query-digest --user=root --password=123456 --review h=localhost,D=test,t=query_review /data/mysql/data/mysql-slow.logmysql> select* from query_review;+----------------------+------------------------------------------+-----------------------------------------------------------------+----------| checksum | fingerprint | sample | first_see+----------------------+------------------------------------------+-----------------------------------------------------------------+----------| 5816476304744969035 | create database ifnot exists `huanqiu` | CREATE DATABASE IF NOT EXISTS `huanqiu` /* pt-table-checksum */ | 2017-01-1| 11295947304747079651 | create database ifnot exists `huanpc` | CREATE DATABASE IF NOT EXISTS `huanpc` /* pt-table-checksum */ | 2017-01-1+----------------------+------------------------------------------+-----------------------------------------------------------------+----------2 rows inset(0.00 sec) | 
从tcpdump中分析:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | [root@master-server ~]# tcpdump -s 65535 -x -nn -q -tttt -i any -c 1000 port 3306 > mysql.tcp.txttcpdump: verbose output suppressed, use -vor -vv forfull protocol decodelistening on any, link-typeLINUX_SLL (Linux cooked), capture size 65535 bytes然后打开另一个终端窗口:[root@master-server ~]# pt-query-digest --type tcpdump mysql.tcp.txtPipeline process 3 (TcpdumpParser) caused an error: substr outside of string at /usr/bin/pt-query-digestline 3628, <> chunk 93.Will retry pipeline process 2 (TcpdumpParser) 100 moretimes.# 320ms user time, 20ms system time, 24.93M rss, 204.84M vsz# Current date: Mon Jan 16 13:24:50 2017# Hostname: master-server# Files: mysql.tcp.txt# Overall: 31 total, 4 unique, 4.43 QPS, 0.00x concurrency _______________# Time range: 2017-01-16 13:24:43.000380 to 13:24:50.001205# Attribute          total     min     max     avg     95%  stddev  median# ============     ======= ======= ======= ======= ======= ======= =======# Exec time           30ms    79us     5ms   967us     4ms     1ms   159us# Rows affecte          14       0       2    0.45    1.96    0.82       0# Query size         1.85k      17     200   61.16  192.76   72.25   17.65......... | 
13)pt-slave-delay
功能介绍:
设置从服务器落后于主服务器指定时间。
用法介绍:
pt-slave-delay [OPTION...] SLAVE-HOST [MASTER-HOST]
原理:通过启动和停止复制sql线程来设置从落后于主指定时间。默认是基于从上relay日志的二进制日志的位置来判断,因此不需要连接到主服务器,如果IO进程不落后主服务器太多的话,这个检查方式工作很好,如果网络通畅的话,一般IO线程落后主通常都是毫秒级别。一般是通过--delay and --delay"+"--interval来控制。--interval是指定检查是否启动或者停止从上sql线程的频繁度,默认的是1分钟检查一次。
使用示例:
范例1:使从落后主1分钟,并每隔1分钟检测一次,运行10分钟
| 1 2 3 | [root@master-server ~]# pt-slave-delay --user=root --password=123456 --delay 1m --run-time 10m --host=192.168.1.1022017-01-16T13:32:31 slave running 0 seconds behind2017-01-16T13:32:31 STOP SLAVE until2017-01-16T13:33:31 at master position mysql-bin.000005/102554361 | 
范例2:使从落后主1分钟,并每隔15秒钟检测一次,运行10分钟:
| 1 2 3 | [root@master-server ~]# pt-slave-delay --user=root --password=123456 --delay 1m --interval 15s --run-time 10m --host=192.168.1.1022017-01-16T13:38:22 slave running 0 seconds behind2017-01-16T13:38:22 STOP SLAVE until2017-01-16T13:39:22 at master position mysql-bin.000005/102689359 | 
14)pt-slave-restart
功能介绍:
监视mysql复制错误,并尝试重启mysql复制当复制停止的时候
用法介绍:
pt-slave-restart [OPTION...] [DSN]
监视一个或者多个mysql复制错误,当从停止的时候尝试重新启动复制。你可以指定跳过的错误并运行从到指定的日志位置。
使用示例:
范例1:监视192.168.1.101的从,跳过1个错误
| 1 | [root@master-server ~]# pt-slave-restart --user=root --password=123456 --host=192.168.1.101 --skip-count=1 | 
范例2:监视192.168.1.101的从,跳过错误代码为1062的错误。
| 1 | [root@master-server ~]# pt-slave-restart --user=root --password=123456 --host=192.168.1.101 --error-numbers=1062 | 
15)pt-diskstats
功能介绍:
是一个对GUN/LINUX的交互式监控工具
用法介绍:
pt-diskstats [OPTION...] [FILES]
为GUN/LINUX打印磁盘io统计信息,和iostat有点像,但是这个工具是交互式并且比iostat更详细。可以分析从远程机器收集的数据。
使用示例:
范例1:查看本机所有的磁盘的状态情况:
| 1 | [root@master-server ~]# pt-diskstats | 
范例2:只查看本机sdc1磁盘的状态情况:
| 1 2 3 4 | [root@master-server ~]# pt-diskstats  --devices-regex vdc1  #ts device    rd_s rd_avkb rd_mb_s rd_mrg rd_cnc   rd_rt    wr_s wr_avkb wr_mb_s wr_mrg wr_cnc   wr_rt busy in_prg    io_s  qtime stime  0.9 vdc1       0.0     0.0     0.0     0%    0.0     0.0     5.9     4.0     0.0     0%    0.0     1.0   0%      0     5.9    0.6   0.4  1.0 vdc1       0.0     0.0     0.0     0%    0.0     0.0     2.0     6.0     0.0    33%    0.0     0.7   0%      0     2.0    0.0   0.7 | 
16)pt-summary
功能介绍:
友好地收集和显示系统信息概况,此工具并不是一个调优或者诊断工具,这个工具会产生一个很容易进行比较和发送邮件的报告。
用法介绍:
pt-summary
原理:此工具会运行和多命令去收集系统状态和配置信息,先保存到临时目录的文件中去,然后运行一些unix命令对这些结果做格式化,最好是用root用户或者有权限的用户运行此命令。
使用示例:
查看本地系统信息概况
| 1 | [root@master-server ~]# pt-summary | 
17)pt-stalk
功能介绍:
出现问题的时候收集mysql的用于诊断的数据
用法介绍:
pt-stalk [OPTIONS] [-- MYSQL OPTIONS]
pt-stalk等待触发条件触发,然后收集数据帮助错误诊断,它被设计成使用root权限运行的守护进程,因此你可以诊断那些你不能直接观察的间歇性问题。默认的诊断触发条件为SHOW GLOBAL STATUS。也可以指定processlist为诊断触发条件 ,使用--function参数指定。
使用示例:
范例1:指定诊断触发条件为status,同时运行语句超过20的时候触发,收集的数据存放在目标目录/tmp/test下:
| 1 | [root@master-server ~]# pt-stalk  --function status --variable Threads_running --threshold 20 --dest /tmp/test  -- -uroot -p123456  -h192.168.1.101 | 
范例2:指定诊断触发条件为processlist,超过20个状态为statistics触发,收集的数据存放在/tmp/test目录下:
| 1 2 3 4 5 6 7 8 9 | [root@master-server ~]# pt-stalk  --function processlist --variable State --match statistics --threshold 20 --dest /tmp/test -- -uroot -p123456  -h192.168.1.101.......2017_01_15_17_31_49-hostname2017_01_15_17_31_49-innodbstatus12017_01_15_17_31_49-innodbstatus22017_01_15_17_31_49-interrupts2017_01_15_17_31_49-log_error2017_01_15_17_31_49-lsof2017_01_15_17_31_49-meminfo | 
18)pt-archiver
功能介绍:
将mysql数据库中表的记录归档到另外一个表或者文件
用法介绍:
pt-archiver [OPTION...] --source DSN --where WHERE
这个工具只是归档旧的数据,不会对线上数据的OLTP查询造成太大影响,你可以将数据插入另外一台服务器的其他表中,也可以写入到一个文件中,方便使用source命令导入数据。另外你还可以用它来执行delete操作。特别注意:这个工具默认的会删除源中的数据!!
使用示例:
范例1:将192.168.1.101上的huanqiu库的haha表id小于10的记录转移到192.168.1.102上的wangshibo库下的wang_test表内,并归档到/var/log/haha_archive_20170115.log文件中(注意:转移前后,两张表对应转移字段要相同,字段属性最好也要相同;)
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | 源数据库机器192.168.1.101的huanqiu库下的haha表在转移前的信息:mysql> select* fromhuanqiu.haha;                                                                                                            +----+---------------+| id | name|+----+---------------+|  1 | changbo       ||  2 | wangpengde    ||  4 | guocongcong   ||  5 | kevin         ||  8 | mamin         ||  9 | shihonge      || 11 | zhanglei      || 15 | zhanghongmiao |+----+---------------+8 rowsinset(0.01 sec)目标数据库机器192.168.1.102的wangshibo库下的wang_test表在转移前的信息:mysql> select* fromwangshibo.wang_test;+------+-----------+| id   | name|+------+-----------+|   20 | guominmin ||   21 | gaofei    ||   22 | 李梦楠    |+------+-----------+3 rowsinset(0.00 sec)接着在192.168.1.101机器上执行转移命令:[root@master-server ~]# pt-archiver --source h=192.168.1.101,D=huanqiu,t=haha --user=root --password=123456 --dest h=192.168.1.102,D=wangshibo,t=wang_test --file ‘/var/log/haha_archive_20170115.log‘ --where "id<=10"  --commit-each上面命令执行成功后,再次观察转移前后信息发现源数据库机器192.168.1.101的huanqiu.haha表数据在转移后,源数据也删除了!mysql> select* fromhuanqiu.haha;+----+---------------+| id | name|+----+---------------+| 11 | zhanglei      || 15 | zhanghongmiao |+----+---------------+2 rowsinset(0.00 sec)查看归档日志:[root@master-server ~]# tail -f /var/log/haha_archive_20170115.log1   changbo2   wangpengde4   guocongcong5   kevin8   mamin9   shihonge目标数据库192.168.1.102的wangshibo.wang_test表内已经移转到了新数据mysql> select* fromwangshibo.wang_test;+------+-------------+| id   | name|+------+-------------+|   20 | guominmin   ||   21 | gaofei      ||   22 | 李梦楠       ||    1 | changbo     ||    2 | wangpengde  ||    4 | guocongcong ||    5 | kevin       ||    8 | mamin       ||    9 | shihonge    |+------+-------------+9 rowsinset(0.00 sec) | 
范例2:将192.168.1.101上的huanqiu库的haha表里id小于10的记录归档到haha_log_archive_2017.10.10.log文件中:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | mysql> select* fromhuanqiu.haha;+----+---------------+| id | name|+----+---------------+|  1 | changbo       ||  2 | wangpengde    ||  4 | guocongcong   ||  5 | kevin         ||  8 | mamin         ||  9 | shihonge      || 11 | zhanglei      || 15 | zhanghongmiao |+----+---------------+8 rowsinset(0.00 sec)[root@master-server ~]# pt-archiver --source h=192.168.1.101,D=huanqiu,t=haha --user=root --password=123456 --file ‘haha_log_archive_2017.10.10.log‘ --where "id<=10" --commit-each转移后的源数据已被删除mysql> select* fromhuanqiu.haha;+----+---------------+| id | name|+----+---------------+| 11 | zhanglei      || 15 | zhanghongmiao |+----+---------------+2 rowsinset(0.00 sec)查看归档文件[root@master-server ~]# cat haha_log_archive_2017.10.10.log1   changbo2   wangpengde4   guocongcong5   kevin8   mamin9   shihonge | 
范例3:删除192.168.1.101上的huanqiu库的haha表中id小于10的记录:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | mysql> select* fromhuanqiu.haha;+----+---------------+| id | name|+----+---------------+|  1 | changbo       ||  2 | wangpengde    ||  4 | guocongcong   ||  5 | kevin         ||  8 | mamin         ||  9 | shihonge      || 11 | zhanglei      || 15 | zhanghongmiao |+----+---------------+8 rowsinset(0.00 sec)[root@master-server ~]# pt-archiver --source h=192.168.1.101,D=huanqiu,t=haha --user=root --password=123456 --purge --where ‘id<=10‘ --no-check-charset<br>再次查看,发现数据已成功删除!mysql> select* fromhuanqiu.haha;+----+---------------+| id | name|+----+---------------+| 11 | zhanglei      || 15 | zhanghongmiao |+----+---------------+2 rowsinset(0.00 sec) | 
19)pt-find
功能介绍:
查找mysql表并执行指定的命令,和gnu的find命令类似。
用法介绍:
pt-find [OPTION...] [DATABASE...]
默认动作是打印数据库名和表名
使用示例:
查找192.168.1.101中1天以前创建的InnoDB的表 ,并打印。
| 1 2 3 4 5 6 7 8 9 10 11 | [root@master-server ~]# pt-find --ctime +1  --host=192.168.1.101 --engine InnoDB --user=root --password=123456`huanpc`.`_heihei_new``huanpc`.`checksums``huanqiu`.`_haha_new``huanqiu`.`checksums``huanqiu`.`heartbeat``mysql`.`innodb_index_stats``mysql`.`innodb_table_stats``mysql`.`slave_master_info``mysql`.`slave_relay_log_info``mysql`.`slave_worker_info` | 
范例2:查找192.168.1.101中1天以前更改过的数据库名字匹配%huanqiu%的并且引擎为Myisam的表,并将表的引擎更改为Innodb引擎。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 先查找出192.168.1.101上1天以前更改过的数据库名字匹配%huanqiu%的并且引擎为Myisam的表[root@master-server ~]# pt-find --ctime +2 --dblike huanqiu --host=192.168.1.101 --engine Myisam --user=root --password=123456`huanqiu`.`_haha_new``huanqiu`.`checksums``huanqiu`.`heartbeat`[root@master-server ~]# pt-find --ctime +2 --dblike huanpc --host=192.168.1.101 --engine Myisam --user=root --password=123456`huanpc`.`_heihei_new``huanpc`.`checksums`再将查找出的表的引擎改为Innodb[root@master-server ~]# pt-find --ctime +2 --dblike huanqiu --host=192.168.1.101 --engine Myisam --user=root --password=123456 --exec "ALTER TABLE %D.%N ENGINE=InnoDB"[root@master-server ~]# pt-find --ctime +2 --dblike huanpc --host=192.168.1.101 --engine Myisam --user=root --password=123456 --exec "ALTER TABLE %D.%N ENGINE=InnoDB"最后再检查对应数据表的引擎 | 
范例3:查找192.168.1.101中huanqiu库和huanpc库中的空表,并删除。
| 1 | [root@master-server ~]# pt-find --empty huanqiu huanpc --host=192.168.1.101 --user=root --password=123456  --exec-plus "DROP TABLE %s" | 
范例4:查找192.168.1.101中超过100M的表
| 1 | [root@master-server ~]# pt-find --tablesize +100M --host=192.168.1.101 --user=root --password=123456 | 
20)pt-kill
功能介绍:
Kill掉符合指定条件mysql语句
用法介绍:
pt-kill [OPTIONS]
加入没有指定文件的话pt-kill连接到mysql并通过SHOW PROCESSLIST找到指定的语句,反之pt-kill从包含SHOW PROCESSLIST结果的文件中读取mysql语句
使用示例:
范例1:查找192.168.1.101数据库服务器运行时间超过60s的语句,并打印
| 1 | [root@master-server ~]# pt-kill --busy-time 60 --print --host=192.168.1.101 --user=root --password=123456 | 
范例2:查找192.168.1.101数据库服务器运行时间超过60s的语句,并kill
| 1 | [root@master-server ~]# pt-kill --busy-time 60 --kill --host=192.168.3.135 --user=root --password=123456 | 
范例3:从proccesslist文件中查找执行时间超过60s的语句
| 1 2 3 | [root@master-server ~]# mysql -uroot -p123456 -h192.168.1.101 -e "show processlist" > processlist.txtWarning: Using a password on the commandline interface can be insecure.[root@master-server ~]# pt-kill --test-matching processlist.txt --busy-time 60 --print | 
mysql主从同步(3)-percona-toolkit工具(数据一致性监测、延迟监控)使用梳理
标签:表示 linux c ted 接下来 mysql语句 visual 没有 远程 oss