首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

SchemaSpy 實戰:自動化產出 MySQL 資料庫 ER 圖與文件

     編輯:MySQL 綜合教學

SchemaSpy 實戰:自動化產出 MySQL 資料庫 ER 圖與文件

面對幾百張表、缺乏文件的舊系統,人工繪製 ER 圖不僅耗時還極易過時。SchemaSpy 這款 Java 開源工具,能直接讀取資料庫中繼資料,自動生成可互動的 HTML 文件與 Graphviz 關係圖,並支援納入 Crontab 實現「模型變更、文件自動同步」。

核心優勢

  • 零侵入:唯讀連線,不修改任何資料。
  • 視覺化導航:點擊表名即可查看欄位、索引、FK、父子表層級,支援「哪張表被引用最多」熱力分析。
  • CI/CD 友善:命令列執行,輸出靜態 HTML,極易整合進 Jenkins/GitLab CI 夜ly 建置。
  • 跨資料庫:除 MySQL 外,支援 PostgreSQL、Oracle、SQL Server、MariaDB 等主流關聯式資料庫。

環境準備

# 1. Java JRE 8+
# 2. Graphviz (提供 dot 指令)
# 3. MySQL Connector/J (mysql-connector-java-x.x.x.jar)
# 4. SchemaSpy 最新版 (schemaSpy_x.x.x.jar)

連線設定檔 mysql.properties

description=Production MySQL
driver=com.mysql.cj.jdbc.Driver
connectionSpec=jdbc:mysql://127.0.0.1:3306/target_db?useSSL=false&serverTimezone=UTC
driverPath=/opt/jdbc/mysql-connector-java-8.0.33.jar

處理隱性關係:Meta XML 補全 FK

許多老系統未建立 FK,SchemaSpy 預設只能識別同名欄位(如 parent_id 對 parent_id)。若父表主鍵叫 id、子表外鍵叫 parent_id,需提供 schemaspy.meta.xml:

<?xml version="1.0" encoding="UTF-8"?>
<schemaMeta xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation="https://schemaspy.sourceforge.net/xmlschema/2011/02/05/schemaspy.meta.xsd">
  <tables>
    <table name="parent" comments="父表">
      <column name="id" primaryKey="true"/>
    </table>
    <table name="child" comments="子表,隱性關聯 parent">
      <column name="id" primaryKey="true"/>
      <column name="parent_id">
        <foreignKey table="parent" column="id"/>
      </column>
    </table>
  </tables>
</schemaMeta>

一鍵生成指令

java -jar schemaSpy_6.2.1.jar \
  -t mysql \
  -db target_db \
  -u readonly_user -p '******' \
  -host 127.0.0.1 -port 3306 \
  -meta schemaspy.meta.xml \
  -o /var/www/html/schemaspy \
  -dp /opt/jdbc/mysql-connector-java-8.0.33.jar

-o 指定輸出目錄,需可被 Nginx/Apache 直接服務。

自動化排程

# /etc/cron.d/schemaspy
0 3 * * * www-data /usr/bin/java -jar /opt/tools/schemaSpy_6.2.1.jar \
  -t mysql -db target_db -u ro_user -p '******' \
  -host 127.0.0.1 -o /var/www/html/schemaspy \
  -meta /opt/tools/schemaspy.meta.xml > /var/log/schemaspy.log 2>&1

每天凌晨 3 點重建,文件永遠與最新結構同步。

進階功能速覽

分頁用途
Tables表清單、行數、欄位數、註解、父子表計數,支援搜尋過濾
Constraints顯式 FK 列表(不含 meta 補充)
Anomalies潛在問題:無索引表、可為 NULL 的唯一鍵、單列表、自增欄位命名不一、空字串 vs NULL 混用
Columns全庫欄位彙總,快速發現漏建 FK 的候選欄位

結語:SchemaSpy 不是銀彈,但它把「文件維護」從人工負擔轉為自動化流程一環。配合 Meta XML 補齊隱性關係,再納入 CI 夜ly 建置,團隊即擁有永不落伍的資料庫地圖——這對新人上手、重構評估、架構溝通都是高價值資產。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved