# 單表
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
mysqldump --where="created_at > '2024-01-01'" -u user -p db_name orders > orders_2024.sql
mysqldump --no-data -u user -p db_name table1 table2 > schema.sql
# 目標端需先建庫
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
# 壓縮
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
# 方法一: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 → 兩端同步調大 |
FLUSH TABLES tbl WITH READ LOCK(MyISAM)或信任 --single-transaction(InnoDB)。--add-drop-table 避免還原衝突。
3. 大表加 --quick、壓縮、分卷。
4. 遠程遷移驗證行數、檢查和、抽樣比對。
5. 備份檔命名:db_tbl_YYYYMMDD_HHMM.sql.gz。