首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >一键生成 MySQL 全面健康报告!DBA 都在偷偷用的巡检脚本开源了!

一键生成 MySQL 全面健康报告!DBA 都在偷偷用的巡检脚本开源了!

作者头像
俊才
发布2026-01-19 13:58:39
发布2026-01-19 13:58:39
1310
举报
文章被收录于专栏:数据库干货铺数据库干货铺

你是否遇到过这些场景?

  • 数据库突然慢如蜗牛,却不知道从哪查起?
  • 新接手一个老系统,连有没有主键、有没有开 binlog 都不清楚?
  • 安全审计来了,被问“有没有空密码账户?”、“root 能不能远程登录?”,一脸懵?
  • 想做一次全面体检,但手动敲几十条 SQL 太麻烦,还容易漏?

别慌!今天,我们开源一个超实用的MySQL自动巡检工具——只需1条命令,自动生成包含50+关键指标的HTML健康报告,覆盖性能、安全、容量、高可用、备份建议等11大维度!

💡 无需安装依赖(除 pymysql),支持手动输入账号密码,绝不泄露敏感信息!

1. 这份报告能告诉你什么?

我们的脚本不是简单跑几个 SHOW STATUS,而是真正站在 DBA + 运维 + 安全 的角度,深度扫描你的 MySQL 实例:

  • ✅ 实例基础信息:版本、运行时间、字符集、时区
  • ✅ 连接与线程:当前连接数、最大连接使用率、线程缓存命中率
  • ✅ 性能瓶颈:QPS/TPS、全表扫描次数、磁盘临时表比例、排序溢出
  • ✅ InnoDB 健康度:缓冲池命中率、脏页比例、死锁次数
  • ✅ 安全风险:空密码账户、匿名用户、root 远程登录、SSL 是否启用
  • ✅ 主从复制状态:IO/SQL 线程、延迟、错误信息(自动识别)
  • ✅ 表结构隐患:无主键表、超大表(>5GB)、高碎片表 Top20
  • ✅ 日志与备份建议:慢查询、binlog 是否开启、保留策略是否合理
  • ✅ 配置合规性检查:innodb_flush_log_at_trx_commit、sync_binlog 等关键参数是否安全

🎯 所有结果以可视化 HTML 报告呈现,红绿灯式预警,一目了然!

2. 如何使用?3 步搞定!

第1步:安装依赖(仅需一次)

代码语言:javascript
复制
pip install pymysql

第2步:保存脚本为 mysql_inspect.py

我已经迭代了个4个大版本十余个小版本,兼容MySQL5.6至MySQL8.4,其他低版本暂未测试过,感兴趣的可以自己测试。(联系我可以提供完整代码

代码语言:javascript
复制
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
MySQL 全面巡检脚本 v4.2 (增强 InnoDB Status 展示)
✅ 修复 IndexError
✅ 完整展示 InnoDB Status 关键段落
✅ 兼容 MySQL 5.6 / 5.7 / 8.0 / 8.4
"""
import pymysql
import os
import sys
import getpass
import datetime
from collections import OrderedDict
REPORT_DIR = 'report'
os.makedirs(REPORT_DIR, exist_ok=True)
def prompt_host_resources():
    print("\n💻 请输入主机资源配置(用于参数合理性分析):")
    cpu_cores_str = input("CPU 核数 (默认: 8): ").strip() or "8"
    memory_gb_str = input("内存大小 (GB, 默认: 16): ").strip() or "16"
    disk_tb_str = input("数据盘总容量 (TB, 默认: 2): ").strip() or "2"

第3步:运行脚本

代码语言:javascript
复制
python3 mysql_inspect.py

然后按提示输入:

代码语言:javascript
复制
💻 请输入主机资源配置(用于参数合理性分析):
CPU 核数 (默认: 8): 4
内存大小 (GB, 默认: 16): 8
数据盘总容量 (TB, 默认: 2): 1
📝 请输入 MySQL 连接信息:
Host (默认: 127.0.0.1): 192.168.1.15
Port (默认: 3306): 3307
User: ops
Password: 

🔒 密码输入时不会回显,安全可靠!

📁 报告自动保存到 report/ 目录,打开即看!

3. 报告内容如下

  • 基础信息
  • 安全风险
  • 性能概览
  • innodb基础监控度检查
  • InnoDB status的信息,包含信号量、死锁信息、缓冲池等内容
  • 事务及锁分析
  • 连接相关健康度检查
  • 主从复制状态检查

实现代码已经特别做了兼容

代码语言:javascript
复制
slave_status = None
    replica_rows = run_query(conn, "SHOW REPLICA STATUS")
    if not replica_rows:
        replica_rows = run_query(conn, "SHOW SLAVE STATUS")
    if replica_rows:
        cursor = conn.cursor()
        cursor.execute("SHOW SLAVE STATUS")
        if cursor.description:
            cols = [d[0] for d in cursor.description]
            slave_status = dict(zip(cols, replica_rows[0]))
        cursor.close()
    if slave_status:
        io_running = slave_status.get('Slave_IO_Running', 'No')
        sql_running = slave_status.get('Slave_SQL_Running', 'No')
        seconds_behind = slave_status.get('Seconds_Behind_Master', None)
        relay_space = slave_status.get('Relay_Log_Space', 0)
        data['replication'] = {
            'io_running': io_running,
            'sql_running': sql_running,
            'seconds_behind': seconds_behind,
            'relay_log_space_mb': round(int(relay_space) / 1024 / 1024, 2),
            'master_host': slave_status.get('Master_Host', 'N/A')
        }
    else:
        data['replication'] = None
  • 参数检查
  • 存储使用情况
  • 表结构隐患: 关注无主键表及自增主键即将耗尽问题

注: 如需导出为 PDF、邮件发送、或定时任务调度,也可以继续扩展。

4. 小结

数据库稳定是业务的生命线。与其等到故障发生再救火,不如定期巡检、防患未然。为什么推荐这个脚本?主要有如下几个特点:

  • 兼容性强:支持 MySQL 5.6 / 5.7 / 8.0 / 8.4
  • 无需额外权限:仅需 SELECT + PROCESS 权限(普通监控账号即可)
  • 零依赖:不依赖 Ansible、SaltStack 或任何外部工具
  • 安全友好:密码通过 getpass 隐藏输入,不记录在历史命令中
  • 开箱即用:HTML 报告自带响应式样式,手机也能看!

快把这个巡检脚本转发给你的DBA,咱们一起进行改进,把它加入我们公共的运维工具箱吧。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-01-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据库干货铺 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档