案例:月度巡检,自动生成报告发给领导¶
场景背景¶
- 时间:每月最后一个周五下午
- 角色:运维工程师,负责 3 个 MySQL 数据库(jump、crm、log)
- 痛点:以前手动写巡检台账,复制粘贴 SQL 结果,耗时 2 小时,还容易漏项
- 目标:用 dbskiter 一键巡检 + 自动生成报告,30 分钟搞定
生活化比喻:月度巡检就像给数据库做全身体检。dbskiter 是全自动体检仪,以前靠人工一项项测血压、血糖、心电图,现在一键出报告。
执行步骤¶
1. 一键巡检(2 分钟)¶
给 jump 数据库做全量检查:
dbskiter --database=jump inspector run
输出摘要:
============================================================
巡检摘要
============================================================
健康评分: 66.4
严重问题: 1
高风险问题: 3
2. 生成 HTML 报告(1 分钟)¶
把结果转成漂亮的网页报告,直接发给领导:
dbskiter --database=jump inspector report --output jump_monthly_2026-06.html
报告内容: - 健康评分雷达图 - 配置检查项(通过/警告/严重) - 性能指标趋势 - 安全风险清单 - 优化建议列表
3. 多数据库批量巡检(5 分钟)¶
如果你有多个数据库,可以用 shell 脚本批量执行:
#!/bin/bash
# 文件名:monthly_inspect.sh
# 功能:批量月度巡检
DATABASES=("jump" "crm" "log")
DATE_STR=$(date +%Y-%m)
for db in "${DATABASES[@]}"; do
echo "========== 正在巡检数据库: $db =========="
dbskiter --database=$db inspector report --output "${db}_monthly_${DATE_STR}.html"
echo "报告已生成: ${db}_monthly_${DATE_STR}.html"
echo ""
done
echo "全部巡检完成!"
执行:
chmod +x monthly_inspect.sh
./monthly_inspect.sh
本案例真实结果解读(jump 数据库)¶
巡检结果总览¶
| 检查大类 | 状态 | 说明 |
|---|---|---|
| 配置检查 | 通过 18 项,警告 1 项 | 慢查询阈值 10s 过高 |
| 性能检查 | 通过 5 项,警告 3 项 | 临时表磁盘、行锁、排序合并 |
| 安全检查 | 通过 4 项,警告 3 项 | SUPER 权限、远程 root |
| 存储检查 | 通过 2 项 | 表数量、大字段正常 |
| 容量检查 | 通过 | 0.03 GB,空间充足 |
严重问题(需立即处理)¶
| 序号 | 问题 | 影响 | 建议动作 | 负责人 | 完成期限 |
|---|---|---|---|---|---|
| 1 | 10 张表使用旧版 UTF8 | emoji 存储失败、字符乱码 | 迁移到 utf8mb4 | 后端组 | 1 周内 |
高风险问题(需本周处理)¶
| 序号 | 问题 | 当前值 | 建议 | 优先级 |
|---|---|---|---|---|
| 1 | 慢查询阈值过高 | 10.0s | 改为 1-2s | 高 |
| 2 | 临时表磁盘使用率 | 61.96% | 优化查询或增 tmp_table_size |
高 |
| 3 | 行锁等待次数 | 147 | 优化长事务,减少锁竞争 | 高 |
其他优化建议¶
| 问题 | 建议 | 收益 |
|---|---|---|
| 冗余索引 10 个 | 清理冗余索引,减少维护开销 | 降低写入延迟 |
| 慢查询日志未启用 | 启用 slow_query_log |
长期监控基础 |
| 4 个 SUPER 权限用户 | 审查权限,最小化原则 | 降低安全风险 |
| 远程 root 访问 | 禁止 root 远程,改用普通用户 | 安全合规 |
进阶:智能巡检¶
自动异常检测¶
让 AI 帮你判断哪些指标"不对劲":
# 检测 CPU 使用率异常(基于历史基线)
dbskiter --database=jump inspector anomalies --metric=cpu_usage --hours=168
# 检测结果示例
[ALERT] 2026-06-15 14:00 CPU 使用率突增至 85%(基线: 35%)
[ROOT_CAUSE] 与慢查询激增时间吻合,建议排查同期慢查询日志
根因分析¶
发现 CPU 高,直接追问原因:
dbskiter --database=jump inspector root-cause --issue="CPU 使用率飙升至 85%"
输出:
根因分析结果:
1. 主因:15:00-15:30 期间慢查询数量增加 320%
2. 触发 SQL:SELECT COUNT(*) FROM orders WHERE status='pending'(无索引)
3. 次要因素:临时表磁盘排序增加,消耗额外 CPU
4. 建议:为 orders.status 添加索引,优化查询写法
风险预测¶
提前预判未来 30 天风险:
dbskiter --database=jump inspector risks --days=30
输出:
风险预测(未来 30 天):
- 磁盘容量:当前 0.03 GB,预计 30 天后 0.05 GB,无风险
- 连接数:峰值使用率 2.6%,无风险
- 表数量:当前 507 张,增长平稳,无风险
- 综合风险等级:LOW
模板:月度巡检报告邮件¶
你可以直接复制以下模板发给团队:
【数据库月度巡检报告】2026 年 6 月
数据库:jump(MySQL 8.0.32)
巡检时间:2026-06-18
健康评分:66.4 / 100(需要关注)
一、严重问题(1 项)
1. [字符集] 10 张表使用旧版 UTF8,需迁移到 utf8mb4
影响:emoji 存储失败
负责人:后端组
期限:2026-06-25
二、高风险问题(3 项)
1. [配置] 慢查询阈值 10s 过高 → 建议改为 1s
2. [性能] 临时表磁盘使用率 61.96% → 优化查询或调整缓冲区
3. [性能] 行锁等待 147 次 → 检查长事务
三、安全建议(3 项)
1. 审查 4 个 SUPER 权限用户
2. 禁止 root 远程访问
3. 清理 10 个冗余索引
四、容量预测
未来 30 天:磁盘、连接数、表数量均无风险,等级 LOW。
完整报告见附件:jump_monthly_2026-06.html
复盘要点¶
1. 巡检频率建议¶
| 频率 | 适用场景 | 命令 |
|---|---|---|
| 每日 | 核心生产库 | monitor health |
| 每周 | 业务库 | inspector run --type performance |
| 每月 | 全库全量 | inspector run + report |
| 按需 | 故障后 | inspector root-cause |
2. 建立基线(长期对比)¶
# 首次建立基线
dbskiter --database=jump inspector baseline --create
# 后续对比(看哪些指标恶化了)
dbskiter --database=jump inspector baseline --compare
3. 常见误区¶
| 误区 | 正确做法 |
|---|---|
| "健康评分 60 分,数据库要崩了" | 66 分是"需要关注",不是"要崩"。看具体项,优先处理严重问题 |
| "警告项太多,看不过来" | 按风险等级排序,严重 > 高 > 中 > 低,一次只处理 Top 3 |
| "巡检报告没人看" | 生成 HTML 报告,用数据说话,附风险预测和责任人 |
延伸阅读¶
- 案例:业务卡顿查慢查询
- 案例:磁盘空间告警
- dbskiter 命令:
inspector run、inspector report、inspector anomalies、inspector root-cause、inspector risks