Debian 上 MariaDB 性能监控实操指南
一 快速检查与内置工具
二 慢查询与 SQL 分析
三 持续监控与可视化
四 关键指标与告警阈值示例
| 指标 | 含义 | 建议阈值或关注点 |
|---|---|---|
| QPS/Questions | 每秒查询量 | 突增或持续下降都需排查(慢查询、阻塞、应用异常) |
| Threads_connected / Max_used_connections | 当前/历史最大连接 | 接近 max_connections 需扩容或优化连接池 |
| Slow_queries / Questions | 慢查询比例 | 比例上升优先排查新上线 SQL、缺失索引、统计信息过期 |
| Aborted_connects / Aborted_clients | 认证失败/客户端异常断开 | 频繁出现可能是网络不稳、密码错误或应用未复用连接 |
| Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests | 缓冲池未命中率 | 命中率下降(更多磁盘读)需增大 innodb_buffer_pool_size 或优化 SQL/索引 |
| Created_tmp_disk_tables / Created_tmp_tables | 磁盘临时表比例 | 比例高说明排序/聚合内存不足,需调 tmp_table_size / max_heap_table_size |
| Seconds_Behind_Master | 复制延迟 | 持续增长需检查从库负载、I/O/SQL 线程、锁争用 |
| Open_tables / Opened_tables | 表缓存压力 | Opened_tables 持续增长需增大 table_open_cache |
| 这些指标与阈值可作为监控大盘与告警的基础,具体数值需结合业务与硬件基线动态调整。 |
五 一键巡检脚本示例
#!/usr/bin/env bash
# 用法:sudo bash mariadb_health.sh
MYSQL="mysql -sN -e"
echo "=== MariaDB 快速巡检 $(date) ==="
# 1) 服务状态
systemctl is-active --quiet mariadb && echo "服务状态: running" || echo "服务状态: stopped"
# 2) 基本指标
echo -e "\n--- 基本指标 ---"
$MYSQL "SHOW STATUS LIKE 'Uptime'; SHOW STATUS LIKE 'Threads_connected'; SHOW STATUS LIKE 'Questions'; SHOW STATUS LIKE 'Slow_queries';"
# 3) 复制延迟(如启用复制)
echo -e "\n--- 复制延迟 ---"
$MYSQL "SHOW SLAVE STATUS\G" | awk '/Seconds_Behind_Master/ {print "Seconds_Behind_Master:", $2}'
# 4) 连接与端口
echo -e "\n--- 连接与端口 ---"
ss -tulnp | grep -E '(:3306|mariadb)'
# 5) 近期慢查询(需已启用慢查询日志)
echo -e "\n--- 近期慢查询(前5条) ---"
if [[ -f /var/log/mysql/mariadb-slow.log ]]; then
tail -n 1000 /var/log/mysql/mariadb-slow.log \
| grep -E '^# Time:|^# User@Host:' \
| tail -10
else
echo "慢查询日志未启用或文件不存在: /var/log/mysql/mariadb-slow.log"
fi
将脚本加入 cron(如每 5 分钟)并结合 Prometheus/Zabbix 做长期趋势与告警,可形成完整的监控闭环。