linux系统中mariadb如何监控
小樊
38
2025-12-20 09:01:16
Linux 下 MariaDB 监控实践指南
一 快速检查与内置指标
- 服务状态与日志
- 使用 systemd 查看运行状态与最近日志:systemctl status mariadb。适合日常巡检与故障初判。
- 即时运行状态
- 使用 mysqladmin 获取关键运行指标:mysqladmin -u root -p status,关注 Uptime、Threads、Questions 等字段,快速判断连接与负载情况。
- 会话与线程
- 登录数据库后查看当前会话与阻塞:SHOW PROCESSLIST;;结合 SHOW STATUS; 获取全局状态变量,用于定位连接风暴、慢查询等。
- 性能模式数据
- 利用 Performance Schema 做细粒度诊断,例如:SELECT * FROM performance_schema.threads;、SELECT * FROM performance_schema.events_statements_current;,用于定位活跃线程与正在执行的 SQL。
二 系统层面资源监控
- 资源与 I/O
- 综合资源:top/htop(CPU、内存、MariaDB 进程占用);磁盘 I/O:iostat(识别读写瓶颈、IOPS、await)。
- 网络与连接
- 端口与连接数:ss -tulnp | grep mariadb 或 netstat -tulnp | grep mariadb,核对监听端口(默认 3306)与当前连接概况。
三 长期可观测性 指标采集与可视化
- Prometheus + mysqld_exporter + Grafana
- 部署 mysqld_exporter 采集数据库指标,建议创建最小权限监控账号并限制连接数:
- 账号与权限:
- CREATE USER ‘mysqld_exporter’@‘localhost’ IDENTIFIED BY ‘StrongPassword’ WITH MAX_USER_CONNECTIONS 2;
- GRANT PROCESS, REPLICATION CLIENT, SELECT ON . TO ‘mysqld_exporter’@‘localhost’;
- FLUSH PRIVILEGES;
- 配置凭证:/etc/.mysqld_exporter.cnf
- [client]
- user=mysqld_exporter
- password=StrongPassword
- systemd 服务示例(监听 9104):
- ExecStart=/usr/local/bin/mysqld_exporter --config.my-cnf /etc/.mysqld_exporter.cnf --web.listen-address=0.0.0.0:9104
- Prometheus 抓取配置片段:
- scrape_configs:
- job_name: mysqld-exporter
static_configs:
- targets: [‘db1:9104’,‘db2:9104’]
- Grafana 可视化:导入官方模板(如 7362、13106)快速获得 MariaDB/Galera 监控大盘。
- 企业级与开源自监控
- Zabbix:部署 zabbix-agent,添加 MariaDB 监控项/模板,适合已有 Zabbix 体系的团队。
- PMM(Percona Monitoring and Management):一体化监控、查询分析与慢查询治理,适合深度性能观测。
- Netdata:开箱即用的实时监控,启用 MySQL 模块即可查看关键指标。
四 关键指标与告警建议
- 建议重点关注的指标与阈值示例
- 连接与线程
- 指标:Threads_connected / Max_used_connections / Threads_running
- 告警:Threads_connected 接近 max_connections;Threads_running 持续偏高(如 > CPU 核数)可能并发过载。
- 查询与慢查询
- 指标:Queries / Questions / Slow_queries
- 建议:开启 slow_query_log,定期分析慢查询;结合 Performance Schema 定位高耗时语句。
- 复制与高可用
- 指标:Slave_IO_Running / Slave_SQL_Running / Seconds_Behind_Master
- 告警:任一复制线程为 No 或 Seconds_Behind_Master 持续增长。
- 缓冲池与缓存命中
- 指标:Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests
- 计算:缓冲池命中率 ≈ 1 − (Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests),低于 95% 建议扩容或优化查询/索引。
- 表与锁
- 指标:Table_locks_waited / Innodb_row_lock_waits
- 告警:等待锁次数持续增长,排查热点更新与锁争用。
- 磁盘与 I/O
- 指标:iostat %util、await、svctm
- 告警:%util 持续接近 100% 或 await 明显升高,需优化 I/O 路径或扩容存储。
- 连接与端口
- 指标:LISTEN 3306 连接数、TIME_WAIT/ESTABLISHED
- 告警:连接数异常增长、端口耗尽或异常 TIME_WAIT 堆积。
五 排障与优化要点
- 慢查询治理
- 开启并分析 slow_query_log,使用 EXPLAIN 检查执行计划,补充合适索引,避免 **SELECT *** 与无限制扫描。
- 配置优化(示例)
- 编辑 /etc/mysql/mariadb.conf.d/50-server.cnf 或 /etc/my.cnf:
- innodb_buffer_pool_size:建议为总内存的约 70%(结合实例角色与内存压力调整)
- innodb_log_file_size:适度增大以减少检查点抖动
- innodb_flush_log_at_trx_commit:1 更安全、2 性能更高(需权衡持久性)
- max_connections:按业务峰值与连接池配置合理设置
- 例行维护
- 定期 OPTIMIZE TABLE、归档历史数据、清理无用日志,保持统计信息与缓存的有效性。