跳转至

案例:月度巡检,自动生成报告发给领导

场景背景

  • 时间:每月最后一个周五下午
  • 角色:运维工程师,负责 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 报告,用数据说话,附风险预测和责任人

延伸阅读