温馨提示×

Ubuntu MySQL如何监控数据库性能

小樊
39
2025-12-10 08:55:59
栏目: 云计算

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 = 1
      • slow_query_log_file = /var/log/mysql/slow.log
      • long_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 的组合,既能发现“慢在哪儿”,也能解释“为什么慢”。

三 第三方监控与可视化

  • 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_connectedmax_connections > 80% 连接池趋满,可能拒绝新连接
慢查询数增长 Slow_queries、慢查询日志 持续上升或突增 结合 pt-query-digest 定位具体 SQL
复制延迟 Seconds_Behind_Master(复制状态) > 60s 影响读一致性与故障切换
InnoDB 缓冲池命中率 Innodb_buffer_pool_read_requestsInnodb_buffer_pool_reads < 95% 命中率低建议增大 innodb_buffer_pool_size
查询缓存命中率 Qcache_hitsQcache_inserts < 90% 命中率低可考虑关闭或调优(MySQL 8.0 已移除)
临时表磁盘化比例 Created_tmp_disk_tablesCreated_tmp_tables > 10% 增加 tmp_table_size/max_heap_table_size 或优化 SQL
锁等待 Innodb_row_lock_waitsInnodb_row_lock_time_avg 持续偏高 关注热点行、事务设计与索引
磁盘 I/O 饱和度 iostat -x 1%utilawait %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)
      通过“脚本巡检 + 可视化平台 + 定期报告”的组合,可形成闭环的监控与持续优化机制。

0