温馨提示×

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 mariadbnetstat -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 可视化:导入官方模板(如 736213106)快速获得 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_commit1 更安全、2 性能更高(需权衡持久性)
      • max_connections:按业务峰值与连接池配置合理设置
  • 例行维护
    • 定期 OPTIMIZE TABLE、归档历史数据、清理无用日志,保持统计信息与缓存的有效性。

0