Ubuntu MySQL如何监控数据库性能
导读:Ubuntu 上监控 MySQL 性能的可落地方案 一 内置与命令行快速检查 服务与基础状态 查看服务状态:systemctl status mysql 查看简要状态:mysqladmin -u root -p status 连接与...
Ubuntu 上监控 MySQL 性能的可落地方案
一 内置与命令行快速检查
- 服务与基础状态
- 查看服务状态:
systemctl status mysql - 查看简要状态:
mysqladmin -u root -p status
- 查看服务状态:
- 连接与线程
- 当前连接与运行线程:
SHOW GLOBAL STATUS LIKE 'Threads_connected';、SHOW FULL PROCESSLIST;
- 当前连接与运行线程:
- InnoDB 关键指标
- 行锁与锁等待:
SHOW GLOBAL STATUS LIKE 'Innodb_row_lock%'; - InnoDB 引擎状态:
SHOW ENGINE INNODB STATUS\G
- 行锁与锁等待:
- 配置与容量
- 关键配置:
SHOW VARIABLES LIKE 'max_connections';、SHOW VARIABLES LIKE '%slow%'; - 库表容量与碎片:
SELECT table_schema, SUM(data_length/1024/1024) AS data_mb, SUM(index_length/1024/1024) AS idx_mb, SUM(data_free/1024/1024) AS free_mb FROM information_schema.tables GROUP BY table_schema;
以上命令适合日常巡检与临时排障,能快速定位连接、锁与容量问题。
- 关键配置:
二 日志与内置性能架构
- 慢查询日志
- 启用与阈值(在
/etc/mysql/my.cnf的[mysqld]段):slow_query_log = 1slow_query_log_file = /var/log/mysql/slow.loglong_query_time = 2- 可选:
log_queries_not_using_indexes = 1
- 分析工具
- 内置:
mysqldumpslow -s t /var/log/mysql/slow.log - 高级:
pt-query-digest /var/log/mysql/slow.log(来自 Percona Toolkit)
- 内置:
- 启用与阈值(在
- 错误日志
- 定位路径:
SHOW VARIABLES LIKE 'log_error'; - 关注启动失败、崩溃、死锁、权限错误等关键信息
- 定位路径:
- Performance Schema 与 Sys Schema
- Performance Schema:细粒度监控 I/O、锁、线程、语句等事件
- 示例:
SELECT EVENT_NAME, COUNT_STAR, SUM_TIMER_WAIT FROM performance_schema.events_waits_summary_global_by_event_name ORDER BY SUM_TIMER_WAIT DESC LIMIT 10;
- 示例:
- Sys Schema(MySQL 5.7+ 内置):更易读的视图
- 示例:
SELECT * FROM sys.statement_analysis ORDER BY avg_latency DESC LIMIT 10; - 示例:
SELECT * FROM sys.user_summary;
通过慢查询日志与 Performance Schema/Sys Schema 的组合,既能发现“慢在哪儿”,也能解释“为什么慢”。
- 示例:
- Performance Schema:细粒度监控 I/O、锁、线程、语句等事件
三 第三方监控与可视化
- Prometheus + Grafana + mysqld_exporter
- 组件作用:Exporter 将 MySQL 指标以 Prometheus 格式暴露;Prometheus 拉取与存储;Grafana 展示与告警
- 部署要点:为 Exporter 创建具备最小权限的监控账号,配置
my.cnf或.my.cnf认证;Prometheus 抓取9104端口;Grafana 导入 MySQL 仪表盘(如 ID 7362)
- Percona Monitoring and Management(PMM)
- 特点:一体化监控平台,覆盖 MySQL/InnoDB、复制、查询分析(Query Analytics)、操作系统指标,部署简单、开箱即用
- Zabbix
- 通过官方模板监控连接数、QPS/TPS、复制延迟、InnoDB 缓冲池命中率等,适合已有 Zabbix 体系的团队
- 轻量实时与系统级工具
- Netdata:开箱即用的实时可视化,内置 MySQL 插件,访问 http://localhost:19999
- Glances:系统全局监控,支持 MySQL 插件(快捷键 Shift+M 查看 MySQL)
- Innotop:类 top 的交互式监控,聚焦 InnoDB、锁、事务、查询等
上述方案可按规模与复杂度选择:轻量场景用 Netdata/Glances/Innotop;团队与可视化平台优先 PMM 或 Prometheus+Grafana。
四 关键指标与告警阈值示例
| 指标 | 如何查看 | 告警阈值示例 | 说明 |
|---|---|---|---|
| 连接数使用率 | Threads_connected、max_connections |
> 80% | 连接池趋满,可能拒绝新连接 |
| 慢查询数增长 | Slow_queries、慢查询日志 |
持续上升或突增 | 结合 pt-query-digest 定位具体 SQL |
| 复制延迟 | Seconds_Behind_Master(复制状态) |
> 60s | 影响读一致性与故障切换 |
| InnoDB 缓冲池命中率 | Innodb_buffer_pool_read_requests、Innodb_buffer_pool_reads |
< 95% | 命中率低建议增大 innodb_buffer_pool_size |
| 查询缓存命中率 | Qcache_hits、Qcache_inserts |
< 90% | 命中率低可考虑关闭或调优(MySQL 8.0 已移除) |
| 临时表磁盘化比例 | Created_tmp_disk_tables、Created_tmp_tables |
> 10% | 增加 tmp_table_size/max_heap_table_size 或优化 SQL |
| 锁等待 | Innodb_row_lock_waits、Innodb_row_lock_time_avg |
持续偏高 | 关注热点行、事务设计与索引 |
| 磁盘 I/O 饱和度 | iostat -x 1(%util、await) |
%util 持续 >
80% 或 await 高 |
I/O 成为瓶颈,考虑更快磁盘或优化 I/O 模式 |
| 这些指标与阈值可作为基线,需结合业务特点与历史趋势动态校准。 |
五 快速上手与自动化巡检
- 5 分钟快速巡检脚本
- 连接与线程:
mysql -e "SHOW GLOBAL STATUS LIKE 'Threads_connected'; " -s -N - 慢查询:
mysql -e "SHOW GLOBAL STATUS LIKE 'Slow_queries'; " -s -N - InnoDB 锁:
mysql -e "SHOW GLOBAL STATUS LIKE 'Innodb_row_lock%'; " -s -N - 错误日志尾部:
sudo tail -n 50 $(mysql -s -N -e "SHOW VARIABLES LIKE 'log_error'; ") - 库表容量:
mysql -e "SELECT table_schema, SUM(data_length/1024/1024) AS data_mb, SUM(index_length/1024/1024) AS idx_mb FROM information_schema.tables GROUP BY table_schema; " -s -N
- 连接与线程:
- 建议的自动化
- 每日/每小时采集上述指标入库或推送到 Prometheus/Grafana;慢查询日志每日用 pt-query-digest 生成报告并归档
- 每周运行 MySQLTuner 获取配置优化建议,并在测试环境验证后再上线
- 重要阈值配置 告警(如连接数、复制延迟、缓冲池命中率、磁盘 I/O)
通过“脚本巡检 + 可视化平台 + 定期报告”的组合,可形成闭环的监控与持续优化机制。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu MySQL如何监控数据库性能
本文地址: https://pptw.com/jishu/768604.html
