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

MySQL 條件導出部分資料:mysqldump --where 與 SELECT INTO OUTFILE 實戰

     編輯:MySQL 資料庫相關知識

僅需導出符合特定條件的資料子集?MySQL 提供兩種原生方式,無需外部工具。

方式一:mysqldump --where 參數(推薦,含結構/可直接還原)

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 ... INTO OUTFILE(純資料、高效能、需 FILE 權限)

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 限制,檔案必須寫入指定目錄。
  • 效能極高,適合大量資料導出 ETL 流程。

對比選型

維度mysqldump --whereSELECT INTO OUTFILE
輸出內容SQL 語句(含 INSERT)純資料 (CSV/TSV)
還原方式mysql < data.sqlLOAD DATA INFILE
權限需求SELECT 權限FILE 權限 + secure_file_priv
效能中等極高
適用場景資料遷移、部分還原、跨版本大數據 ETL、外部系統對接

進階技巧

  • 分批導出大表: 結合 --where="id BETWEEN 1 AND 100000" 循環導出,避免單檔過大。
  • 導出至壓縮檔: mysqldump ... | gzip > data.sql.gz。
  • 遠端導出: mysqldump -h remote_host ... 直接從應用伺服器導出,無需登入資料庫主機。

掌握這兩招,按需導出不再需要寫腳本篩選,原生工具最高效。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved