Skip to content

MySQL 监控数据收集策略

监控指标分类

系统层面指标

  • CPU使用率:整体和每个核心的使用率
  • 内存使用情况:已用内存、可用内存、缓存使用
  • 磁盘I/O:读写吞吐量、IOPS、响应时间
  • 网络流量:入站/出站流量、连接数
  • 系统负载:1分钟、5分钟、15分钟平均负载

MySQL层面指标

  • 连接数:当前连接数、最大连接数、连接使用率
  • 查询性能:QPS、TPS、慢查询数
  • 缓冲区使用:InnoDB缓冲池命中率、键缓冲区命中率
  • 表锁和行锁:锁等待次数、锁等待时间
  • 复制状态:复制延迟、复制错误

存储引擎指标

  • InnoDB指标:缓冲池使用、脏页比例、事务数
  • MyISAM指标:键缓冲区使用、表锁情况

应用层面指标

  • 应用响应时间
  • 错误率
  • 业务关键操作执行时间

数据收集方法

内置工具

Performance Schema

sql
-- 启用Performance Schema
SET GLOBAL performance_schema = ON;

-- 查看等待事件
SELECT * FROM performance_schema.events_waits_current;

-- 查看语句执行统计
SELECT * FROM performance_schema.events_statements_summary_by_digest;

INFORMATION_SCHEMA

sql
-- 查看表状态
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'your_database';

-- 查看索引使用情况
SELECT * FROM INFORMATION_SCHEMA.STATISTICS;

SHOW命令

sql
-- 查看全局状态
SHOW GLOBAL STATUS;

-- 查看全局变量
SHOW GLOBAL VARIABLES;

-- 查看进程列表
SHOW PROCESSLIST;

外部工具

Prometheus + MySQL Exporter

  • 安装MySQL Exporter收集MySQL指标
  • 配置Prometheus抓取目标
  • 设置抓取频率和数据保留策略

Zabbix

  • 部署Zabbix Agent和MySQL模板
  • 配置监控项和触发器
  • 设置数据采集间隔

Nagios

  • 使用check_mysql插件监控MySQL状态
  • 配置服务检查和通知

自定义脚本

  • 编写Shell或Python脚本定期收集指标
  • 使用crontab定时执行
  • 将数据存储到时序数据库

数据收集频率

高频指标(1-5秒)

  • CPU使用率
  • 内存使用率
  • 磁盘I/O
  • 网络流量
  • MySQL连接数
  • QPS/TPS

中频指标(1-5分钟)

  • 缓冲区使用率
  • 锁等待情况
  • 复制状态
  • 慢查询数

低频指标(10-30分钟)

  • 表大小
  • 索引使用情况
  • 分区表状态

数据存储方案

时序数据库

  • Prometheus:适合短期数据存储,默认保留15天
  • InfluxDB:适合长期数据存储,支持高压缩比
  • OpenTSDB:基于HBase,适合大规模数据存储

关系型数据库

  • 使用MySQL或PostgreSQL存储聚合数据
  • 定期汇总和清理原始数据
  • 适合存储长期趋势数据

日志系统

  • ELK Stack:收集和分析MySQL日志
  • Graylog:集中管理MySQL错误日志和慢查询日志
  • Splunk:企业级日志分析平台

数据收集架构

集中式架构

  • 所有监控数据发送到中央服务器
  • 适合小规模环境
  • 部署简单,维护成本低

分布式架构

  • 分层收集:本地收集 → 区域聚合 → 中央存储
  • 适合大规模环境
  • 提高可靠性和可扩展性

混合架构

  • 关键指标实时收集
  • 非关键指标批量收集
  • 平衡实时性和系统开销

数据收集最佳实践

减少对生产环境的影响

  • 合理设置收集频率,避免过度收集
  • 使用只读账号进行监控
  • 避免在业务高峰期执行重查询

确保数据可靠性

  • 实现数据收集的高可用性
  • 设置数据验证机制,确保数据准确性
  • 建立数据备份策略

优化数据存储

  • 实施数据分级存储策略
  • 定期清理过期数据
  • 对历史数据进行压缩处理

自动化管理

  • 自动发现新的MySQL实例
  • 自动配置监控项
  • 自动调整收集频率

常见问题(FAQ)

Q1: 如何平衡监控数据收集的全面性和系统开销?

A1: 可以采用分层监控策略:

  • 核心指标高频收集(如QPS、连接数)
  • 次要指标中频收集(如缓冲区使用)
  • 非关键指标低频收集(如表大小) 同时根据服务器性能和业务重要性调整收集频率。

Q2: 监控数据存储多久比较合适?

A2: 建议采用多级存储策略:

  • 原始数据:保留7-15天
  • 聚合数据(小时级):保留30-90天
  • 趋势数据(天级):保留1-3年 具体存储时间根据业务需求和存储成本调整。

Q3: 如何确保监控数据收集的高可用性?

A3: 可以通过以下方式实现:

  • 部署多个监控采集器,避免单点故障
  • 实现采集器的自动故障转移
  • 采用异步数据传输方式,确保数据不丢失
  • 定期测试监控系统的可靠性

Q4: 除了技术指标,还应该监控哪些业务相关指标?

A4: 建议监控以下业务相关指标:

  • 核心业务操作的执行时间
  • 业务高峰期的系统表现
  • 业务数据量增长趋势
  • 特定业务功能的错误率 这些指标能帮助DBA更好地理解数据库性能对业务的影响。