工具介紹
SchemaSpy 是 Java 開發的資料庫中繼資料分析工具,掃描 Schema 生成互動式 HTML 文件,包含 ER 圖、表關聯、異常檢測、欄位統計等,適合文件化、審計、新人上手。
安裝需求
- Java JRE 8+
- Graphviz(繪製 ER 圖必須)
- MySQL Connector/J (mysql-connector-java.jar)
- SchemaSpy 最新 JAR:GitHub Releases
配置檔案:mysql.properties
# mysql.properties
description=MySQL Production Database
driver=com.mysql.cj.jdbc.Driver
connectionSpec=jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&allowPublicKeyRetrieval=true
driverPath=/usr/share/java/mysql-connector-java.jar
元資料提示檔:schemaspy.meta.xml(處理隱性關聯)
當表間無外鍵但有邏輯關聯(如 parent_id 對應 id),提供提示讓 SchemaSpy 識別:
Production Database - Generated by SchemaSpy
執行指令
java -jar schemaspy-6.1.0.jar \
-t mysql \
-host 127.0.0.1 \
-port 3306 \
-db mydb \
-u readonly_user \
-p password \
-connprops useSSL=false\\&allowPublicKeyRetrieval=true \
-dp /usr/share/java/mysql-connector-java.jar \
-meta schemaspy.meta.xml \
-o /var/www/html/schemaspy_output/ \
-imageformat png
關鍵參數說明
| 參數 | 說明 |
-t | 資料庫類型:mysql, pgsql, oracle, sqlserver 等 |
-host/-port/-db | 連線資訊 |
-u/-p | 唯讀帳號(建議專用分析帳號) |
-dp | JDBC 驅動 JAR 路徑 |
-meta | 元資料提示檔(可選) |
-o | 輸出目錄(需 Web 伺服器可讀) |
-imageformat | 圖片格式:png, svg |
-connprops | JDBC 額外連線屬性 |
自動化部署:Crontab 定時生成
# /etc/cron.d/schemaspy
# 每天凌晨 2 點重新生成
0 2 * * * schemaspy_user /usr/local/bin/generate_schemaspy.sh >> /var/log/schemaspy.log 2>&1
#!/bin/bash
# generate_schemaspy.sh
cd /opt/schemaspy
java -jar schemaspy-6.1.0.jar \
-t mysql -host 127.0.0.1 -port 3306 -db mydb \
-u spy_user -p "$SPY_PASS" \
-dp /usr/share/java/mysql-connector-java.jar \
-meta schemaspy.meta.xml \
-o /var/www/html/schemaspy/ \
-imageformat svg
輸出報告核心功能導覽
| 分頁 | 功能 | 價值 |
| Tables | 所有表列表:行數、大小、欄位數、註解、父/子表連結 | 快速掌握表規模與關聯 |
| Relationships | ER 圖:可點擊縮放、過濾、顯示/隱藏關聯類型 | 視覺化理解 Schema 拓撲 |
| Constraints | 顯式外鍵約束列表 | 審計完整性約束覆蓋率 |
| Anomalies | 潛在問題:無索引表、可為 NULL 的唯一鍵、單欄表、自增欄位命名不規範等 | 發現設計缺陷與技術債 |
| Columns | 全庫欄位搜尋:按名稱/型別過濾 | 快速定位特定欄位用法 |
進階用法
- 多 Schema 合併:多次執行指定不同
-db,輸出至不同子目錄
- CI/CD 整合:Pipeline 中執行,構建成品上傳至文件站點
- 只讀帳號最小權限:
GRANT SELECT, SHOW VIEW, PROCESS ON *.* TO 'spy'@'%';
- 大型資料庫優化:
-nopages 跳過詳細頁面生成、-noviews 忽略視圖
替代工具對比
| 工具 | 語言 | 特色 | 授權 |
| SchemaSpy | Java | 命令列、HTML 輸出、CI 友善、支援 10+ 資料庫 | LGPL |
| MySQL Workbench | C++/Python | GUI、逆向工程、模型設計、同步 | GPL |
| Dataedo | .NET | 文件導出 PDF/HTML、描述編輯、團隊協作 | 商業 |
| dbdocs.io | Node.js | 雲端文件、Markdown 定義、版本控制 | Freemium |