MySQL / 簡短指南

如何在 MySQL 中匯出資料庫和表格結構描述

分享到

簡介

在關聯式資料庫中,資料庫結構描述定義了資料庫的結構及其組成部分,例如表格、欄位和索引。 提取和匯出此資訊在許多情況下都很有用,包括備份、遷移到新環境、視覺化資料結構以及在程式碼庫中管理這些結構。

在本簡短指南中,我們將討論如何使用 mysqldump 命令匯出 MySQL 資料庫結構描述。 雖然此公用程式可以從 MySQL 匯出多種類型的資料,但我們將在本指南中重點介紹如何提取資料結構本身。

基本用法

從 MySQL 匯出資料庫結構描述所需的基本命令如下所示

mysqldump --user=USERNAME --host=HOSTNAME --password --no-data DATABASE > schema.sql

此處的選項可以分為兩個不同的類別。

第一個類別定義了通用基本連線資訊,您需要提供這些資訊才能連線到任何 MySQL 公用程式

  • --user= / -u:您要用來驗證身份的資料庫使用者名稱
  • --password / -p:強制 mysqldump 提示輸入密碼以進行身份驗證
  • --host= / -h:MySQL 所在的主機名稱或 IP 位址
  • --port= / -p:MySQL 正在監聽的連接埠號碼

如果您連線到預設組態中執行的本機 MySQL 執行個體,通常可以省略主機和連接埠選項。

第二個類別告訴 mysqldump 要匯出什麼

  • --no-data / -d:這告訴公用程式僅匯出結構本身,而不匯出它們包含的記錄

此外,第一個非選項引數(此處以單字「DATABASE」表示)指示要匯出的確切資料庫。

使用此資訊,您可以使用類似以下的命令,使用名為 sales_reporter 的受限使用者匯出名為 SALES 的資料庫結構描述

mysqldump --user=sales_reporter --password --no-data SALES > sales_database_schema.sql

修改匯出行為

上面討論的基本用法將輸出與相關資料庫相關的每個結構。 我們可以使用許多其他選項來修改此行為。

鎖定多個資料庫

您可以使用以下選項之一修改匯出將鎖定的資料庫數量

  • --databases / -B:將所有名稱引數視為資料庫名稱。 這可讓您同時從多個資料庫匯出結構描述。
  • --all-databases / -A:匯出 MySQL 中的所有資料庫(performance_schema 資料庫除外,該資料庫在內部使用)

因此,若要傾印所有資料庫,您可以使用

mysqldump --user=USERNAME --password --no-data --all-databases > all_schemas.sql

或者,若要從三個不同的資料庫傾印結構,您可以使用

mysqldump --user=USERNAME --password --no-data --databases FIRST SECOND THIRD > three_db_schemas.sql

僅匯出特定結構

您也可以透過在資料庫名稱之後將要匯出的特定表格命名為額外引數,來減少匯出的結構。

例如,如果您的 SALES 資料庫中的三個表格名為 EMPLOYEESTOREINVENTORY,您可以透過輸入以下內容僅匯出這些結構

mysqldump --user=USERNAME --password --no-data SALES EMPLOYEE STORE INVENTORY > some_sales_tables.sql

在此建構中,第一個引數始終假定為資料庫名稱,而所有其他具名引數都視為該資料庫中的表格。 因此,此用法與 --databases 選項不相容,後者會修改 mysqldump 解釋額外引數的方式。

匯出其他結構

除了資料庫和表格之外,您還可以透過包含以下選項來明確匯出事件和常式定義

  • --routines / -R:在匯出的結構描述傾印中包含預存程序和函數
  • --events / -E:在輸出中包含事件排程器事件的定義

例如,若要包含資料庫 SALES 的傾印,其中包含這些額外定義,您可以輸入

mysqldump --user=USERNAME --password --no-data --routines --events SALES > all_sales_schemas.sql

其他相關選項

一些額外選項可能很有用,具體取決於您的目標,包括

  • --add-drop-database:在每個 CREATE DATABASE 陳述式之前,將 DROP DATABASE 陳述式新增至傾印檔案。 這可確保首先移除給定資料庫的任何先前定義的結構,以避免衝突。
  • --single-transaction:將交易隔離等級設定為「可重複讀取」,以協助確保使用 InnoDB 等儲存引擎時,資料庫狀態更加一致。 這會傾印資料庫在初始化傾印時的即時快照。

這些選項可以新增至您的結構描述傾印命令,而不會改變其他組件的基本語意或含義。

結論

能夠匯出您的結構描述可讓您將資料庫結構儲存在資料庫本身之外。 這在設定新環境、隨著需求變化演進您的結構描述以及視覺化您正在儲存的資訊結構時很有幫助。

關於作者
Justin Ellingwood

Justin Ellingwood

Justin 自 2013 年以來一直撰寫關於資料庫、Linux、基礎架構和開發人員工具的文章。 他目前與妻子和兩隻兔子住在柏林。 他通常不必以第三人稱寫作,這對所有相關方來說都是一種解脫。