HOWTO · MySQL

使用 Mysqldump 匯出 MySQL 資料庫

我們將學習如何使用 mysqldump 命令列實用程式匯出 MySQL 資料庫。我們還將學習如何從特定資料庫中匯出表。

本頁內容

使用 mysqldump 將 MySQL 資料庫匯出為 SQL 檔案。在命令中加入資料表名稱即可限制匯出範圍;使用 --databases 或 --all-databases 可擴大匯出範圍;使用 --no-data 則可只匯出結構,不包含資料列。範例會說明命令引數與密碼提示,但不會驗證匯出檔是否可還原。

使用 mysqldump 匯出 MySQL 資料庫

mysqldump 是一種命令列工具,可將 MySQL 資料庫匯出為 SQL 陳述式。匯出檔可以包含資料表定義與資料、指定的資料表、數個具名資料庫、所有資料庫,或僅包含資料庫結構。以下命令會將匯出內容寫入檔案,但不會驗證產生的備份是否可還原。

了解 mysqldump 語法與選項

一般命令的格式如下:mysqldump -u USER -p [OPTIONS] DATABASE [TABLE ...] > FILE.sql。請將大寫佔位文字替換為你的帳戶、資料庫、可選的資料表名稱,以及目的檔案路徑。資料庫名稱必須放在資料表名稱之前。Shell 的 > 運算子會將標準輸出重新導向至目的檔案;如果該檔案已存在,內容會被取代。若要保留現有檔案,請先選擇新路徑或移動備份。

-u 選項用來指定 MySQL 使用者名稱。單獨使用 -p 時,工具會提示你輸入密碼;不要把密碼接在 -p 後面,以免密碼出現在 Shell 歷史記錄或處理程序資訊中。--no-data 選項會略過資料列,--databases 用來指定具名資料庫,而 --all-databases 則用來指定所有資料庫。請參閱 MySQL mysqldump 參考文件,了解其他選項及你所安裝版本的詳細資訊。

本次改寫中的獨立 Shell 範例並未執行。依照 Shell 重新導向的語意,該範例會將示範文字寫入暫存檔,再印出檔案內容;它不會連線至 MySQL,也不會執行 mysqldump。

本節中的程式碼以及顯示的標籤或輸出仍為英文。

work_dir="$(mktemp -d)"
trap 'rm -rf "$work_dir"' EXIT
printf '%s\n' 'CREATE TABLE customer (id INT);' > "$work_dir/person.sql"
cat "$work_dir/person.sql"

匯出單一資料庫

若要匯出一個資料庫,請執行 mysqldump -u root -p person > person_backup.sql。出現提示時,輸入 root 的密碼。檔名是相對於命令目前所在的目錄;若要指定目的位置,請使用絕對路徑,例如 /backups/person_backup.sql。請確認該帳戶有權讀取資料庫,且目的目錄可供寫入。

匯出指定資料表

先放入資料庫名稱,再接上要匯出的資料表名稱。若要匯出一個資料表,請使用 mysqldump -u root -p person customer > customer_table.sql。若要匯出兩個資料表,請使用 mysqldump -u root -p person customer employee > customer_employee.sql。依預設,這些命令會匯出所選資料表的定義與資料。若需要不同的行為,請加入適用於你所用 MySQL 版本的文件所列選項。

匯出多個或所有資料庫

匯出一個或多個具名資料庫時,請在資料庫名稱前使用 --databases:mysqldump -u root -p --databases person courses > person_courses.sql。此選項會在匯出檔中加入建立資料庫的陳述式,有助於匯入這些具名資料庫。

若要匯出此帳戶可存取的所有資料庫,請使用拼寫正確的 --all-databases 選項:mysqldump -u root -p --all-databases > all_databases.sql。帳戶權限會決定哪些資料庫與物件可納入匯出。由於完整匯出檔可能包含敏感資料,請將輸出檔存放在受保護的位置。

匯出資料庫結構但不含資料

使用 --no-data 可匯出資料表定義而不包含資料列:mysqldump -u root -p --no-data person > person_structure.sql。如果你需要用於開發或文件的結構複本,這種方式很實用。此操作仍會連線至 MySQL 伺服器,並且需要足夠的存取權限;它不是無需連線伺服器即可轉換現有檔案的方法。

結論

請依匯出範圍選擇命令:指定資料庫名稱可匯出整個資料庫,在名稱後加入資料表名稱可選擇特定資料表,使用 --databases 可匯出具名資料庫,使用 --all-databases 可涵蓋整個伺服器的資料庫範圍,而使用 --no-data 則可匯出不含資料列的結構。請在提示時輸入密碼,並選擇能安全保存匯出檔的位置。命令成功執行會建立匯出檔,但在將它視為備份之前,仍應另外測試還原。