MySQL 資料庫備份教學:使用 mysqldump 匯出特定資料表的完整指南

1. 簡介

MySQL 是一種廣泛應用於許多網站與應用程式的資料庫管理系統。其中,「mysqldump」指令在進行資料庫備份或遷移時,是非常重要的工具。特別是在需要從大型資料庫中僅備份特定資料表時,這個指令非常實用。

本文將詳細解說如何使用 mysqldump 指令指定特定資料表並進行匯出。不僅適合初學者理解,亦會介紹中階使用者常用的參數與進階應用方式。

2. mysqldump 指令的基本語法

首先,讓我們來確認 mysqldump 指令的基本用法。此指令可用於匯出(備份)整個資料庫或特定資料表的結構與資料。

基本語法

只要指定使用者名稱、密碼、資料庫名稱與資料表名稱,就可以備份特定資料表,如下所示:

mysqldump -u 使用者名稱 -p 資料庫名稱 資料表名稱 > 輸出檔案.sql
  • -u:指定連線至資料庫的使用者名稱
  • -p:指定密碼(輸入時會顯示提示)
  • 資料庫名稱:欲匯出的資料庫名稱
  • 資料表名稱:欲匯出的特定資料表名稱
  • > 輸出檔案.sql:指定輸出的檔案名稱

常用選項

  • --single-transaction:對 InnoDB 資料表而言,可在保持交易一致性的情況下進行備份
  • --skip-lock-tables:避免在備份過程中鎖定資料表

3. 匯出特定資料表的方法

指定單一資料表

若只想備份某個特定資料表,可在資料庫名稱後加上資料表名稱。以下範例僅匯出 users 資料表:

mysqldump -u root -p my_database users > users_dump.sql

此指令會將 my_database 資料庫內的 users 資料表結構與資料存至 users_dump.sql

指定多個資料表

若需要一次備份多個資料表,可以以空格分隔各資料表名稱:

mysqldump -u root -p my_database users orders products > multiple_tables_dump.sql

上述範例會同時匯出 usersordersproducts 三個資料表。

使用資料表清單進行匯出

當需要匯出的資料表數量龐大時,逐一手動輸入會非常不便。此時可以透過 SHOW TABLES 指令或腳本,自動生成欲匯出的資料表清單。

mysql -u root -p my_database -N -e "SHOW TABLES LIKE 'hoge%'" > table_list.txt
mysqldump -u root -p my_database `cat table_list.txt` > partial_dump.sql

此方法能有效率地僅備份符合指定模式的資料表。

4. 常用選項與進階應用

mysqldump 提供許多選項,可依需求彈性備份。以下介紹幾個常見的情境:

僅匯出結構

若只需備份資料表結構而不需要資料,可使用 --no-data 選項。

mysqldump -u root -p my_database --no-data users > users_structure.sql

此指令只會匯出 users 資料表的結構,資料不會被包含。

僅匯出資料

若只需備份資料而不需結構,可使用 --no-create-info 選項。

mysqldump -u root -p my_database --no-create-info users > users_data.sql

此指令僅會匯出資料,不包含資料表結構。

依條件匯出特定資料

利用 --where 選項,可以僅匯出符合條件的資料。例如僅匯出 id 大於 100 的資料:

mysqldump -u root -p my_database users --where="id > 100" > users_filtered_dump.sql

如此可從大型資料庫中抽取所需的資料進行備份。

5. 實際使用範例

案例1:備份單一資料表

例如要備份 employees 資料庫中的 salary 資料表,可以這樣操作:

mysqldump -u root -p employees salary > salary_dump.sql

案例2:依條件備份資料

若只想匯出特定範圍的資料,可使用 --where。例如備份 users 資料表中 id 大於 100 的資料:

mysqldump -u root -p my_database users --where="id > 100" > users_partial_dump.sql

6. 注意事項與最佳實務

資料表鎖定問題

使用 mysqldump 時,可能因為資料表被鎖定導致其他操作無法進行。特別是在系統運行中,建議使用 --single-transaction 選項以避免影響。同時,對 InnoDB 資料表也建議搭配 --skip-lock-tables 使用。

大容量資料的處理方式

當資料量龐大時,匯出過程可能耗時很長。可以利用 gzip 即時壓縮以節省磁碟空間與時間:

mysqldump -u root -p my_database | gzip > backup_$(date +%Y%m%d).sql.gz

此指令會在匯出的同時進行壓縮,節省儲存空間。

7. 結論

本文介紹了如何使用 mysqldump 指令匯出特定資料表,涵蓋了基本語法、依條件匯出、僅結構或僅資料匯出,以及進階自動化腳本應用。mysqldump 是非常強大的工具,若能正確運用,將能有效進行資料備份與遷移。

下篇文章將會更深入探討 mysqldump 的進階參數,並與其他備份工具進行比較。