MySQL运维必备:24个核心监控参数(含查询语句+异常处理)
作为DBA或后端开发,MySQL的稳定运行直接决定业务可用性。而高效监控是提前规避性能瓶颈、故障雪崩的关键——本文整理了MySQL运维中最核心的24个监控参数,涵盖连接状态、性能指标、复制同步、系统资源等维度,附带直接可用的查询命令和异常处理建议,堪称运维必备手册!
一、连接状态监控:掌握数据库连接健康度
连接数异常是MySQL最常见的故障诱因之一,需重点监控活跃连接、并发连接等指标:
1. 系统MySQL进程数
核心作用:检查MySQL服务是否正常运行,避免进程异常退出。
查询命令:
ps -ef | grep "mysql" | grep -v "grep" | wc -l
正常范围:单机部署时通常为1-5个进程(主进程+子进程),集群环境需结合部署架构判断。
异常处理:进程数为0表示MySQL服务未启动,需执行systemctl start mysql重启;进程数持续飙升需排查是否存在恶意连接攻击。
2. 已连接客户端数(Threads_connected)
核心作用:监控当前活跃的客户端连接数,避免连接数耗尽。
查询命令:
show status like 'Threads_connected';
正常范围:不超过max_connections参数的80%(默认max_connections=151)。
异常处理:接近或达到max_connections时,需检查是否存在连接泄露(如应用未释放连接),可临时调整set global max_connections=500(长期需修改配置文件)。
3. 运行中线程数(Threads_running)
核心作用:反映数据库当前并发处理压力,判断是否超负荷。
查询命令:
show status like 'Threads_running';
正常范围:一般不超过CPU核心数的2倍,短时间峰值可接受。
异常处理:数值持续超过预设阈值(如CPU核心数×2)且5秒内未回落,需排查慢查询、锁等待等问题(结合show processlist进一步分析)。
4. 线程创建数(Threads_created)
核心作用:评估线程缓存效率,避免频繁创建线程消耗资源。
查询命令:
show status like 'Threads_created';
正常范围:数值应较低,随时间增长平缓。
异常处理:数值飙升说明thread_cache_size配置不足,需调整该参数(建议设置为Threads_connected的10%-20%)。
5. 客户端连接详情(show processlist)
核心作用:实时查看所有连接的状态、执行语句、阻塞情况。
查询命令:
show processlist; -- 查看所有连接(前100条)
-- 或查看所有连接(含完整SQL)
select id, user, host, db, state, time, info from information_schema.processlist;
关键关注:
State字段:出现Locked(锁等待)、Sending data(数据传输缓慢)需重点排查;Time字段:执行时间超过long_query_time(默认10秒)的语句需标记为慢查询;Info字段:查看具体执行SQL,定位低效查询。
6. 按主机分组的连接数
核心作用:识别异常连接来源(如单台主机恶意连接)。
查询命令:
select host, count(host) as connection_count from information_schema.processlist group by host;
异常处理:某台主机连接数突增时,可通过防火墙限制该IP访问,或排查应用是否存在连接池配置异常。
二、性能指标监控:定位SQL与资源瓶颈
性能指标直接反映数据库处理效率,需重点关注全表扫描、慢查询、缓存命中率等:
7. 慢查询数(Slow_queries)
核心作用:统计超过long_query_time或未使用索引的查询,是性能优化的核心依据。
查询命令:
show status like 'Slow_queries';
正常范围:数值应尽量低,随业务增长平缓。
异常处理:
- 开启慢查询日志(
set global slow_query_log=1),记录慢查询详情; - 使用
pt-query-digest工具分析慢查询日志,优化SQL(如添加索引、重构语句)。
8. 全表扫描数(Select_scan)
核心作用:统计未使用索引的查询次数,反映索引设计合理性。
查询命令:
show status like 'Select_scan';
正常范围:Select_scan / Com_select(总查询数)的比值应保持恒定(建议低于5%)。
异常处理:比值持续增长时,需排查无索引的SQL,通过explain分析执行计划,添加缺失索引。
9. 表缓存未命中数(Opened_tables)
核心作用:评估table_open_cache配置,避免频繁打开表文件。
查询命令:
show status like 'Opened_tables';
正常范围:每秒打开表数量少于1-2个。
异常处理:数值过高说明table_open_cache不足,需调整该参数(建议设置为512-2048,根据业务表数量调整)。
10. TPS(每秒事务量)
核心作用:反映数据库事务处理能力,评估系统负载。
计算公式:TPS = (Com_commit + Com_rollback) / 统计时间(秒)
查询命令:
-- 先查询初始值
show status like 'Com_commit';
show status like 'Com_rollback';
-- 间隔N秒后再次查询,计算差值
TPS = (新Com_commit - 旧Com_commit + 新Com_rollback - 旧Com_rollback) / N
正常范围:无固定标准,需结合业务峰值判断(如电商秒杀场景TPS可达数千,普通业务可能数百)。
异常处理:TPS突降可能是数据库性能瓶颈或业务异常,需结合慢查询、锁状态进一步排查。
11. 临时表创建数(Create_tmp%)
核心作用:统计临时表创建情况,避免磁盘临时表过多消耗IO。
查询命令:
show status like 'Create_tmp%';
关键指标:
Create_tmp_tables:内存临时表数量(正常);Create_tmp_disk_tables:磁盘临时表数量(需尽量减少)。
异常处理:Create_tmp_disk_tables飙升时,需优化SQL(如避免大表排序、分组),或调整tmp_table_size、max_heap_table_size参数(增大内存临时表阈值)。
12. 锁状态监控(%lock%)
核心作用:排查锁等待、死锁等问题,避免事务阻塞。
查询命令:
show status like '%lock%';
关键指标:
Table_locks_waited:表锁等待次数(应接近0);Innodb_row_lock_waits:行锁等待次数(需结合业务判断,频繁增长需排查)。
异常处理:锁等待次数飙升时,通过show engine innodb status \G查看死锁详情,优化事务执行顺序,减少长事务。
13. Key Buffer命中率(MyISAM缓存)
核心作用:评估MyISAM存储引擎的索引缓存效率(适用于MyISAM表)。
计算公式:
key_buffer_read_hits = (1 - key_reads / key_read_requests) * 100%
key_buffer_write_hits = (1 - key_writes / key_write_requests) * 100%
查询命令:
show status like 'Key%';
正常范围:读取命中率应≥99%,写入命中率应≥95%。
异常处理:命中率过低说明key_buffer_size不足,需调整该参数(建议设置为物理内存的25%-50%,针对MyISAM表)。
14. InnoDB Buffer命中率
核心作用:评估InnoDB存储引擎的缓存效率(适用于InnoDB表,当前主流)。
计算公式:
Innodb_buffer_read_hits = (1 - innodb_buffer_pool_reads / innodb_buffer_pool_read_requests) * 100%
查询命令:
show status like 'innodb_buffer_pool_read%';
正常范围:命中率应≥99.5%。
异常处理:命中率过低说明innodb_buffer_pool_size不足(建议设置为物理内存的50%-70%),或存在大量非热点数据访问。
三、InnoDB专属监控:保障事务与存储稳定
InnoDB是MySQL默认存储引擎,需重点监控其缓存、IO、表空间等状态:
15. InnoDB引擎状态(show engine innodb status)
核心作用:获取InnoDB详细运行状态,包括IO负载、事务、锁等待等。
查询命令:
show engine innodb status \G;
关键关注项:
- 「平均负载」:查看最近N秒的IO、事务统计;
- 「Pending normal aio reads」:InnoDB IO请求队列大小(超过10-20说明IO瓶颈);
- 「Buffer pool hit rate」:InnoDB缓存命中率(需≥99.5%);
- 「inserts/s、updates/s、deletes/s」:事务操作频率,判断是否符合业务预期;
- 「TRANSACTIONS」:查看当前事务状态,是否存在死锁。
16. InnoDB表空间信息
核心作用:监控表空间使用率,避免磁盘空间耗尽。
查询命令:
-- 查看所有数据库的InnoDB表空间大小(单位:MB)
select table_schema,
round(sum(data_length + index_length)/1024/1024, 4) as total_size_mb,
round(sum(data_free)/1024/1024, 4) as free_size_mb
from information_schema.tables
where engine = 'InnoDB'
group by table_schema;
异常处理:表空间使用率超过85%时,需及时扩容磁盘,或清理历史数据(如归档日志表、过期业务数据)。
四、复制状态监控:保障主从同步稳定性
主从复制是MySQL高可用的核心,需重点监控同步状态、延迟量:
17. 从库同步状态(Slave_running)
核心作用:判断从库是否正常同步主库数据。
查询命令:
show status like 'Slave_running';
正常范围:返回值为ON(同步正常)。
异常处理:返回OFF时,执行show slave status \G查看具体错误(如Last_IO_Error、Last_SQL_Error),常见原因包括主从数据不一致、权限不足、网络中断。
18. 复制延迟量(Seconds_Behind_Master)
核心作用:统计从库比主库落后的秒数,避免数据不一致。
查询命令:
show slave status \G; -- 查看 Seconds_Behind_Master 字段
正常范围:0秒(无延迟),峰值不超过30秒。
异常处理:延迟持续增大时,需排查:
- 主库存在大事务(如批量更新),需拆分事务;
- 从库配置过低(如CPU/内存不足),需升级硬件;
- 复制过滤规则不合理,需优化
replicate_do_db/replicate_ignore_db。
五、系统资源监控:保障底层环境稳定
数据库性能依赖系统资源,需同步监控CPU、内存、磁盘IO等:
19. 系统运行时间(uptime)
核心作用:检查服务器是否正常运行,是否存在重启。
查询命令:
uptime
异常处理:运行时间过短(如几分钟)说明服务器频繁重启,需排查硬件故障、系统崩溃等问题。
20. CPU使用率
核心作用:判断CPU是否成为性能瓶颈。
查询命令:
top -- 实时查看CPU使用率(关注 mysqld 进程)
vmstat 1 5 -- 统计1秒一次,共5次的CPU状态(us字段:用户态CPU使用率)
正常范围:CPU使用率峰值不超过80%,持续超过90%需警惕。
异常处理:mysqld进程CPU占比过高时,需排查慢查询、索引缺失、并发连接过多。
21. 磁盘IO
核心作用:监控磁盘读写压力,避免IO瓶颈。
查询命令:
iostat -x 1 5 -- 查看磁盘IO状态(%util字段:磁盘使用率,%await:IO等待时间)
vmstat 1 5 -- 查看 bi(磁盘读)、bo(磁盘写)字段
正常范围:%util不超过80%,%await不超过20ms。
异常处理:磁盘IO使用率过高时,需:
- 优化SQL(减少大量读写操作);
- 迁移热点数据至SSD磁盘;
- 调整InnoDB IO参数(如
innodb_flush_log_at_trx_commit)。
22. 内存与Swap使用
核心作用:避免内存不足导致频繁使用Swap,降低性能。
查询命令:
free -h -- 查看内存使用情况
vmstat 1 5 -- 查看 si(Swap读)、so(Swap写)字段
正常范围:Swap使用率低于10%,si/so数值接近0。
异常处理:Swap频繁读写时,需:
- 增大物理内存;
- 调整MySQL内存参数(如
innodb_buffer_pool_size、key_buffer_size),避免内存分配过多; - 关闭不必要的系统服务,释放内存。
六、辅助诊断监控:快速定位隐藏问题
23. MySQL错误日志
核心作用:记录MySQL启动、运行过程中的错误信息,是故障排查的关键。
默认路径:
- Linux:
/var/log/mysql/error.log(或通过my.cnf的log_error参数配置); - Windows:
C:\ProgramData\MySQL\MySQL Server X.X\data\hostname.err。
异常处理:日志中出现ERROR级别信息需立即处理(如权限不足、表损坏、内存分配失败)。
24. 数据库大小
核心作用:监控数据库存储增长趋势,提前规划扩容。
查询命令:
-- 查看所有数据库大小(单位:MB)
select table_schema,
round(sum(data_length + index_length)/1024/1024, 4) as db_size_mb
from information_schema.tables
group by table_schema
order by db_size_mb desc;
异常处理:数据库大小突增时,需排查是否存在异常数据写入(如日志表未清理、恶意插入数据)。
总结:MySQL监控核心优先级
- 基础可用性:MySQL进程数、Slave_running、系统uptime(确保服务正常运行);
- 连接稳定性:Threads_connected、Threads_running、show processlist(避免连接耗尽);
- 性能瓶颈:Slow_queries、Select_scan、缓存命中率(优化SQL与配置);
- 资源支撑:CPU、磁盘IO、内存(保障底层资源充足);
- 数据一致性:复制延迟、InnoDB表空间(避免数据丢失或不一致)。
浙公网安备 33010602011771号