MySQLHealthCheck_<IP>_<时间戳>.txt,把它拷回来上传到本服务即可。
下载后用 scp / rsync / 跳板机粘贴等方式放到目标主机任意目录:
# 在你本地电脑上: scp mysqlHealthCheckV3.0.sh dba@<db-host>:~/ # 登到目标主机后: chmod +x ~/mysqlHealthCheckV3.0.sh
推荐 交互式(终端会提示输用户名 / 密码 / 端口等):
./mysqlHealthCheckV3.0.sh
自动化 命令行参数(适合 Ansible / CI / 批量):
./mysqlHealthCheckV3.0.sh \
--user dbadmin --password 'xxx' \
--host 127.0.0.1 --port 3306 \
--output-dir ./reports
# 跑完产出 ./reports/MySQLHealthCheck_<IP>_<时间戳>.txt
更多参数(默认值适合大部分场景):
| 参数 | 含义 | 默认 |
|---|---|---|
--user | MySQL 用户名(需 SELECT / PROCESS / REPLICATION CLIENT 只读权限) | dbadmin |
--password | 密码;不传则交互输入 | (交互) |
--host / --port | MySQL 连接地址 | 127.0.0.1 / 3306 |
--socket | socket 文件路径;可替代 host/port | (自动发现) |
--defaults-file | my.cnf 路径 | (自动发现) |
--mysql-cmd | mysql 客户端路径 | (自动发现) |
--output-dir | 输出目录 | 当前目录 |
--slow-log-lines | 采集慢日志末尾几行 | 5000 |
--error-log-lines | 采集 error log 末尾几行 | 500 |
--backup-paths | 探测备份产物的路径(逗号分隔) | /backup, /data/backup, ... |
--test-login | 只做登录预检,不采集 | — |
--non-interactive | 强制非交互(缺参数即报错退出) | — |
查看完整参数:./mysqlHealthCheckV3.0.sh --help
回到 首页,拖拽 txt 到上传区,自动按复制拓扑分组 → 每个集群一份 docx 巡检报告。
多节点集群:把所有节点的 txt 一起上传,服务端会按 Master_Host / slave IP is / server_id 三种信号自动识别拓扑。
采集脚本只读,需要这些权限:
-- 建议建一个专门的只读账号,host 限制在 127.0.0.1 或跳板机
CREATE USER 'dbadmin'@'127.0.0.1' IDENTIFIED BY '<复杂密码>';
GRANT SELECT, PROCESS, REPLICATION CLIENT, SHOW DATABASES,
SHOW VIEW, REPLICATION SLAVE
ON *.* TO 'dbadmin'@'127.0.0.1';
FLUSH PRIVILEGES;
权限对应用途:
SELECT — 读 mysql.* / information_schema / performance_schema / sysPROCESS — SHOW FULL PROCESSLIST、SHOW ENGINE INNODB STATUSREPLICATION CLIENT — SHOW SLAVE / MASTER STATUSSHOW DATABASES + SHOW VIEW — 库 / 视图清单REPLICATION SLAVE — 部分版本读 binlog 列表用| 分类 | 包含 |
|---|---|
| ① 操作系统与硬件 | hostname、CPU、内存、磁盘、网卡、kernel 版本、网络连接数 |
| ② MySQL 基础信息 | 版本、编译平台、启动时间、当前时间、插件、字符集 |
| ③ MySQL Variables | 全量 SHOW VARIABLES(buffer pool / log / replication / sql_mode 等) |
| ④ 主从复制 | SLAVE STATUS、MASTER STATUS、BINARY LOGS、GTID、并行复制配置、semi-sync |
| ⑤ 数据库容量 | TOP 10 大表 / 大索引、库容量、碎片率、非 utf8 表、BLOB 分布、自增主键使用率 |
| ⑥ 用户与权限 | mysql.user 全表、密码过期、host=% 用户、登录失败计数(host_cache) |
| ⑦ 会话与锁 | PROCESSLIST、INNODB LOCKS / LOCK WAITS / TRX、metadata_locks |
| ⑧ InnoDB 引擎 | SHOW ENGINE INNODB STATUS、Buffer Pool 状态、关键指标(含 HLL) |
| ⑨ 性能(sys 库) | TOP 20 SQL(按 latency / count)、全表扫描、临时表溢出、磁盘排序、未使用 / 冗余索引 |
| ⑩ 日志 | slow_query_log 状态 + 末尾 5000 行;error_log 状态 + 末尾 500 行 |
| ⑪ 备份与 binlog | 探测 xtrabackup / mariabackup / mysqldump,crontab、备份目录、binlog 目录 |
| ⑫ 安全合规 | Audit Plugin、TLS/SSL 状态、空密码用户、旧认证插件、SQL_MODE |
所有项都是只读查询;脚本不修改任何业务数据,不创建表,不写 mysql 系统库。
部分能。脚本会自动跳过没权限的部分(比如 SHOW ENGINE INNODB STATUS 有些云需要超管权限)。但 OS 层信息(CPU / 内存 / 文件系统)拿不到 — 云数据库就别看 OS 部分。
不会。全部是只读 SELECT / SHOW。最多在 OS 上创建一个 MySQLHealthCheck_*.txt 输出文件。
典型 5-30 秒。大库(>100 GB 或 >10000 表)可能 1-2 分钟(卡在 information_schema 大查询)。
不确定参数对不对,先试一下不真采集:
./mysqlHealthCheckV3.0.sh --test-login --non-interactive \ --user dbadmin --password 'xxx' --host 127.0.0.1 --port 3306
输出 MySQL 登录测试成功 就 OK。
采集出来的 txt 含 hostname / IP / 库名 / 表名等。要交付给客户/外部,建议过一遍 sed:
# 把 hostname 替换成 masked-hostname
sed -i 's/your-real-host\.example\.com/masked-hostname/g' \
MySQLHealthCheck_*.txt
本服务的集群识别已经做了脱敏兼容(v5.0.2+),即使 hostname 全部脱敏,也能根据 Master_Server_Id 匹配主从。
MySQL 5.6 / 5.7 / 8.0 / 8.4 全支持;MariaDB 10.3+ 也能跑(部分 8.0 专属字段会显示空)。