MySQL結合使用資料庫分析工具SchemaSpy的方法_Mysql

來源:互聯網
上載者:User

 近來,我和一幫老客戶一起工作,他們讓花時間給他們說一下在他們新環境中使用的新工具。其中,我發現的一個非常有用的工具是SchemaSpy。

SchemaSpy是Java開發的的工具(要求java 5或更高版本的支援),主要用來分析資料庫中資料模型的中繼資料,並且能產生基於瀏覽器可視化的顯示。通過點擊就可瞭解資料表的階層,父子表關係等,主要通過HTML 連結或者實體關聯圖來表達。它也被設計成用來協助解決由於約束而導致的資料庫關聯失敗的遲鈍錯誤。

我所喜歡ERD工具所能做的一件事是能快速的產生一個圖形表達,來展現資料庫那個表被引用最多,那些表已經被代替了是可以刪除的(為什麼要儲存你不需要的的資料呢?)。通過瞭解資料庫表關係而不是僅僅看查詢語句,這可以加快的開始步伐,並且還促進開發的過程使其更有效。SchemaSpy的另一個優點是,他是一個命令列工具,在每次執行後才產生html頁面,所以特別適合用於crontab中,使得模型改變後能自動調整頁面。很不錯,是吧?

這個工具使用起來簡單明了,可以幫你做很多的事。主要是,如果你的資料庫有一個外鍵,你就偷著樂吧,如果沒有,也不要太絕境,你還有更多的工作等著你。絕大多數情況下,SchemSpy可以出色的完成任務,但是有時候你需要以中繼資料檔案的形式給它一點點的資訊。

安裝SchemaSpy及其相關

    下載 SchemaSpy最新版的jar檔案(書寫本文時的版本是5.0.0)
    確認你有一個能運行於你的操作平台的Java JRE
    你需要一個你所用資料庫的Java驅動——我在使用 MySQL Connector/J
    安裝graphiz 包

建立 mysql.properties檔案

當需求尚不明確時,我喜歡這樣建立一下,以便讓命令列能又短又整潔。這是我為我的Percona Server 5.6.10沙箱所使用的屬性檔案:

複製代碼 代碼如下:
description=MySQL
driver=com.mysql.jdbc.Driver
connectionSpec=jdbc:mysql://127.0.0.1:5610/schemaspy
driverPath=/usr/share/java/mysql-connector-java.jar

Schema的例子:

CREATE TABLE `parent` ( `parent_id` int(10) unsigned NOT NULL AUTO_INCREMENT, PRIMARY KEY (`parent_id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1CREATE TABLE `child_A` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `parent_id` int(10) unsigned DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1CREATE TABLE `child_B` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `parent_id` int(10) unsigned DEFAULT NULL, PRIMARY KEY (`id`), KEY `parent_id` (`parent_id`), CONSTRAINT `child_B_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `parent` (`parent_id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1

請注意,在表child_A裡有一個隱含的通過parent_id作為外部索引鍵關聯到parent的關係,但在表child_B中建立了一個顯式的外鍵parent_id。這會影響SchemaSpy如何辨別關係,以及你是否需要提供一個提示。
 運行SchemaSpy(有外鍵)

如果沒有中繼資料檔案,你運行SchemaSpy,你將能看到parent 表和child_B表的關係如下圖所示:

表child_A也能被加進來顯示,如果你的標籤指出了他們關係框,但是這個通常只能在你的子表和父表使用完全一樣的名字(本例中parent_id)時候才能起作用。你的環境看起裡就像是許多商店,在父表中名字是id,在他其的子表他們代表為parent_id——這情景對開發人員可能比較熟悉,但是對SchemaSpy根本沒有任何的協助。那就是需要中繼資料檔案來大顯身手的時候。

 配置中繼資料檔案

中繼資料檔案是一個XML格式的。下面的配置執行個體是用來把child_A錶鏈接到parent表。

<?xml version="1.0" encoding="UTF-8"?><schemaMeta xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="http://schemaspy.sourceforge.net/xmlschema/2011/02/05/schemaspy.meta.xsd"><comments>Main Production Database. Percona, Michael Coburn</comments><tables><table name="parent" comments="Parent table"><column name="parent_id" primaryKey="true"></column></table><table name="child_A" comments="Non-FK relationship, implicit relationship to parent"><column name="id" primaryKey="true"></column><column name="parent_id"><foreignKey table="parent" column="parent_id"/></column></table></tables></schemaMeta>

更多的複雜配置例子的可以 訪問。
運行SchemaSpy

下面的文法是串連MySQL資料庫,SchemaSy同時對其他大多數流行的關係資料有很好支援。

java -jar schemaSpy_5.0.0.jar -t mysql -u msandbox_ro -p msandbox -meta schemaspy.meta.xml -o /var/www/schemaspy/

-o選項,標識SchemaSpy的輸出檔案目錄,要確定這個目錄可以被web伺服器所操作。需要提及的是,我通過在jar包所在目錄建立一個mysql.properties檔案,這樣我可以不用輸入任何的伺服器:連接埠以及資料庫名稱的資訊。
瀏覽SchemaSpy輸出

三個表的完整的關係視圖如下圖所示:

收尾感想

儘管我提及到了關係欄,SchemaSpy最有用的功能。為了避免SchemaSpy只有這個功能這樣的假象,我要提及一下更多的功能欄:

  •      表——名稱,子表數量,父表,列計數,行計數,還有註解--大量用於高層次預覽表大小以及一種快捷的方法是,用瀏覽的搜尋屬性定位到特定的表。
  •     限制——列出資料庫中明確的外鍵限制(這不包括通過中繼資料檔案配置的限制!)。
  •     異常——基於名字指出可能的欄位/表的關係,沒有索引的表,標識為可空的欄位和唯一欄位(吐了!),單列表,子增長欄位的名稱;Null 字元而不是實際sqlnull值的表;在發生重大錯誤時候,這可以作為一個大體的資料庫檢查項,或者細節需求的瀏覽。
  •     欄位——庫總所有欄位的列表,很方便通過名稱篩選來查看是否有忽略的明確限制,然後把它們寫到你的中繼資料檔案中。
  •     貢獻——這是一個自由軟體,John Currier請求得到你的捐獻,一般它能有更多的理由來花費更多的精力和時間來維護這個軟體,而不僅僅是他老婆的抱怨。

最後,你不要忘了,把配置好的SchemaSpy寫到crontab來實現自動化。

如果正在使用其他的ERD工具,和SchemaSpy相比較怎麼樣?請通過評論暢所欲言。謝謝你有耐心讀完本文。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.