僅需導出符合特定條件的資料子集?MySQL 提供兩種原生方式,無需外部工具。
mysqldump -u root -p \
--no-create-db \
--add-drop-table=FALSE \
--where="user_id = 128560" \
--skip-lock-tables \
database_name table_name > data.sql
--where:直接接 WHERE 子句內容(不含 WHERE 關鍵字),支援完整 SQL 條件表達式。--no-create-db:不輸出 CREATE DATABASE。--add-drop-table=FALSE:不輸出 DROP TABLE,安全導入現有表。--skip-lock-tables:避免鎖表影響線上服務(InnoDB 配合 --single-transaction 更佳)。SELECT order_id, product_name, qty
FROM orders
WHERE created_at >= '2023-01-01' AND status = 'paid'
INTO OUTFILE '/data/orders_2023_q1.txt'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n';
LOAD DATA INFILE 對應格式。secure_file_priv 限制,檔案必須寫入指定目錄。| 維度 | mysqldump --where | SELECT INTO OUTFILE |
|---|---|---|
| 輸出內容 | SQL 語句(含 INSERT) | 純資料 (CSV/TSV) |
| 還原方式 | mysql < data.sql | LOAD DATA INFILE |
| 權限需求 | SELECT 權限 | FILE 權限 + secure_file_priv |
| 效能 | 中等 | 極高 |
| 適用場景 | 資料遷移、部分還原、跨版本 | 大數據 ETL、外部系統對接 |
--where="id BETWEEN 1 AND 100000" 循環導出,避免單檔過大。mysqldump ... | gzip > data.sql.gz。mysqldump -h remote_host ... 直接從應用伺服器導出,無需登入資料庫主機。掌握這兩招,按需導出不再需要寫腳本篩選,原生工具最高效。