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: 在輸出中包含事件排程器(Event Scheduler)事件的定義

例如,要匯出包含這些額外定義的 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、基礎設施和開發工具的文章。他目前與妻子和兩隻兔子住在柏林。他通常不必以第三人稱寫作,這對所有相關方來說都是一種解脫。
© . This site is unofficial and not affiliated with Prisma Data, Inc.