如何监控MySQL

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何监控MySQL相关的知识,希望对你有一定的参考价值。

首先介绍下 pt-stalk,它是 Percona-Toolkit 工具包中的一个工具,说起 PT 工具包大家都不陌生,平时常用的 pt-query-digest、 pt-online-schema-change 等工具都是出自于这个工具包,这里就不多介绍了。

pt-stalk 的主要功能是在出现问题时收集 OS 及 mysql 的诊断信息,这其中包括:

1. OS 层面的 CPU、IO、内存、磁盘、网络等信息;

2. MySQL 层面的行锁等待、会话连接、主从复制,状态参数等信息。

而且 pt-stalk 是一个 Shell脚本,对于我这种看不懂 perl 的人来说比较友好,脚本里面的监控逻辑与监控命令也可以拿来参考,用于构建自己的监控体系。

三、使用

接着我们来看下如何使用这个工具。

pt-stalk 通常以后台服务形式监控 MySQL 并等待触发条件,当触发条件时收集相关诊断数据。

触发条件相关的参数有以下几个:

    function:

    ∘ 默认为 status,代表监控 SHOW GLOBAL STATUS 的输出;

    ∘ 也可以设置为 processlist,代表监控 show processlist 的输出;

    variable:

    ∘ 默认为 Threads_running,代表 监控参数,根据上述监控输出指定具体的监控项;

    threshold:

    ∘ 默认为 25,代表 监控阈值,监控参数超过阈值,则满足触发条件;

    ∘ 监控参数的值非数字时,需要配合 match 参数一起使用,如 processlist 的 state 列;

    cycles:

    ∘ 默认为 5,表示连续观察到五次满足触发条件时,才触发收集;

    连接参数:host、password、port、socket。

    其他一些重要参数:

    iterations:该参数指定 pt-stalk 在触发收集几次后退出,默认会一直运行。

    run-time:触发收集后,该参数指定收集多长时间的数据,默认 30 秒。

    sleep:该参数指定在触发收集后,sleep 多久后继续监控,默认 300 秒。

    interval:指定状态参数的检查频率,判断是否需要触发收集,默认 1 秒。

    dest:监控数据存放路径,默认为 /var/lib/pt-stalk。

    retention-time :监控数据保留时长,默认 30 天。

    daemonize:以后台服务运行,默认不开启。

    log:后台运行日志,默认为 /var/log/pt-stalk.log。

    collect:触发发生时收集诊断数据,默认开启。

    ∘ collect-gdb:收集 GDB 堆栈跟踪,需要 gdb 工具。

    ∘ collect-strace:收集跟踪数据,需要 strace 工具。

    ∘ collect-tcpdump:收集 tcpdump 数据,需要 tcpdump 工具。

参考技术A 一,获取mysql用户下的进程总数
ps -ef | awk 'print $1' | grep "mysql" | grep -v "grep" | wc-1
二,主机性能状态
# uptime
[root@ ~]# uptime
13:05:52 up 53 days, 52 min, 1 user, load average: 0.00, 0.00, 0.00

三,CPU使用率
# top

# vmstat
四,磁盘IO量
# vmstat 或 # iostat
五,swap进出量[内存]
# free
六,数据库性能状态
(1)QPS(每秒Query量)
QPS = Questions(or Queries) / seconds
mysql > show /*50000 global */ status like 'Question';
(2)TPS(每秒事务量)
TPS = (Com_commit + Com_rollback) / seconds
mysql > show status like 'Com_commit';
mysql > show status like 'Com_rollback';
(3)key Buffer 命中率
key_buffer_read_hits = (1-key_reads / key_read_requests) * 100%
key_buffer_write_hits = (1-key_writes / key_write_requests) * 100%
mysql> show status like 'Key%';
(4)InnoDB Buffer命中率
innodb_buffer_read_hits = (1 - innodb_buffer_pool_reads / innodb_buffer_pool_read_requests) * 100%
mysql> show status like 'innodb_buffer_pool_read%';
(5)Query Cache命中率
Query_cache_hits = (Qcahce_hits / (Qcache_hits + Qcache_inserts )) * 100%;
mysql> show status like 'Qcache%';
(6)Table Cache状态量
mysql> show status like 'open%';
(7)Thread Cache 命中率
Thread_cache_hits = (1 - Threads_created / connections ) * 100%
mysql> show status like 'Thread%';
mysql> show status like 'Connections';
(8)锁定状态
mysql> show status like '%lock%';
(9)复制延时量
mysql > show slave status
(10) Tmp Table 状况(临时表状况)
mysql > show status like 'Create_tmp%';
(11) Binlog Cache 使用状况
mysql > show status like 'Binlog_cache%';
(12) Innodb_log_waits 量
mysql > show status like 'innodb_log_waits';

当然你也可以使用一下开源监控软件进行监控
一,RRDTool
二,Nagios
三,MRTG
四,Cacti本回答被提问者采纳

以上是关于如何监控MySQL的主要内容,如果未能解决你的问题,请参考以下文章

如何监控mysql表的变化

实战案例:Zabbix监控MySQL主机

mysql监控哪些

如何监控MySQL

如何监控MySQL

如何实现MySQL性能监控