mysqldump 基礎語法
mysqldump [OPTIONS] database [tables]
# 位於 mysql/bin/ 目錄
核心參數速查表
| 參數 | 短參 | 作用 |
| --add-drop-table | | 每表前加 DROP TABLE IF EXISTS,防匯入失敗 |
| --add-locks | | INSERT 前後加 LOCK/UNLOCK TABLES |
| --complete-insert | -c | INSERT 包含欄位名,利於異構遷移 |
| --delayed-insert | | 使用 INSERT DELAYED |
| --flush-logs | -F | 備份前刷新 Binlog |
| --force | -f | 忽略錯誤繼續執行 |
| --lock-tables | -l | 備份期間鎖定表(MyISAM 必須) |
| --no-create-info | -t | 僅導出資料,無 CREATE TABLE |
| --no-data | -d | 僅導出結構,無 INSERT |
| --opt | | 開啟快速導出/導入優化組合(預設開啟) |
| --quick | -q | 不緩衝結果直接寫檔,大表必加 |
| --tab=path | -T | 產生 .sql(結構) + .txt(資料) 兩檔案 |
| --where="..." | -w | 條件過濾導出資料 |
實戰指令大全
1. 導出整庫(結構+資料)
mysqldump -u root -p dataname > dataname.sql
2. 導出單表
mysqldump -u root -p dataname users > dataname_users.sql
3. 僅導出結構
mysqldump -u root -p -d --add-drop-table dataname > structure.sql
4. 條件導出(如 2000 年後訂單)
mysqldump -u root -p --where="Order_Date >= '2000-01-01'" dataname Orders > recent_orders.sql
5. 導出為 CSV 格式(便於 Excel)
mysqldump -u root -p --tab=/tmp/export --fields-terminated-by=, --no-create-info dataname Orders
6. 導入資料庫
# 方法一:source 指令
mysql -u root -p
CREATE DATABASE target_db;
USE target_db;
SOURCE /path/to/dump.sql;
# 方法二:管道導入
mysql -u root -p target_db < dump.sql
進階技巧
大表備份優化
mysqldump -u root -p --single-transaction --quick --master-data=2 \
--routines --triggers --events large_db | gzip > large_db_$(date +%F).sql.gz
--single-transaction:InnoDB 一致性熱備份,不鎖表
--master-data=2:輸出 Binlog 位置(註釋形式),支援 PITR
gzip:即時壓縮節省空間
只備份特定資料庫的特定表
mysqldump -u root -p db_name table1 table2 table3 > subset.sql
排除特定表
mysqldump -u root -p --ignore-table=db.log_table --ignore-table=db.temp_table db_name > clean.sql
SELECT INTO OUTFILE 替代方案
-- 直接在 SQL 中導出
SELECT * INTO OUTFILE '/tmp/orders.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
FROM orders WHERE order_date >= '2024-01-01';
- 需
FILE 權限
- 輸出目錄受
secure_file_priv 限制
- 可配合 JOIN 複雜查詢導出報表
Schema 定義
用資料定義語言(DDL)表示的語句集,完整描述資料庫結構。
常見坑點提醒
- 編碼不一致:導出/導入字符集必須一致,否則亂碼
- 版本差異:高版本導出導入低版本可能失敗,加
--compatible=mysql40
- 權限不足:需
SELECT, LOCK TABLES, SHOW VIEW, RELOAD, PROCESS 等權限
- max_allowed_packet:大表導入報錯 1153 時調大此參數