首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

mysqldump 指定表備份與還原:單表、多表、遠程遷移實操指南

     編輯:MySQL 資料庫相關知識

指定表備份語法

# 單表
mysqldump -u user -p db_name table_name > table_name.sql

# 多表(空格分隔)
mysqldump -u user -p db_name table1 table2 table3 > tables.sql

# 加常用參數(生產建議)
mysqldump --single-transaction --quick --add-drop-table -u user -p db_name table1 table2 > tables.sql

還原指定表

# 進入目標資料庫
mysql -u user -p db_name

# 執行 SQL 檔
SOURCE tables.sql;

或非互動:

mysql -u user -p db_name < tables.sql

進階場景與技巧

1. 條件式備份部分資料

mysqldump --where="created_at > '2024-01-01'" -u user -p db_name orders > orders_2024.sql

2. 僅備份結構(無資料)

mysqldump --no-data -u user -p db_name table1 table2 > schema.sql

3. 遠程直接遷移指定表(無中間檔案)

# 目標端需先建庫
mysqladmin -h dst_host -u user -p create db_name

# 來源 → 目標
mysqldump --single-transaction -h src_host -u user -p db_name table1 table2 | mysql -h dst_host -u user -p db_name

4. 壓縮與分卷(大表)

# 壓縮
mysqldump -u user -p db_name big_table | gzip > big_table.sql.gz

# 分卷(配合 split,每 100MB)
mysqldump -u user -p db_name big_table | split -b 100M - big_table_part_
# 還原
cat big_table_part_* | mysql -u user -p db_name

5. 還原至不同表名/庫(重命名)

# 方法一:sed 替換 SQL 檔
sed 's/`old_table`/`new_table`/g' old_table.sql > new_table.sql

# 方法二:mysqldump 導出後手動修改 CREATE TABLE/INSERT 陳述式

常見問題

現象原因與解法
Unknown table表名拼寫錯誤、大小寫敏感(Linux)、表不存在
Access denied帳號缺乏 SELECT/LOCK TABLES 權限
Table doesn't exist 還原時目標庫未建立、表名不符、SQL 檔損壞
Duplicate entry目標表已有資料 → 加 --add-drop-table 或先 TRUNCATE
Max packet size大行超過 max_allowed_packet → 兩端同步調大

最佳實務清單

  1. 備份前 FLUSH TABLES tbl WITH READ LOCK(MyISAM)或信任 --single-transaction(InnoDB)。
  2. 2. 參數 --add-drop-table 避免還原衝突。 3. 大表加 --quick、壓縮、分卷。 4. 遠程遷移驗證行數、檢查和、抽樣比對。 5. 備份檔命名:db_tbl_YYYYMMDD_HHMM.sql.gz。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved