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

MySQL 備份神器 mysqldump 完整使用指南:導出導入、結構數據分離、WHERE 過濾、壓縮傳輸

     編輯:MySQL 資料庫相關知識

mysqldump 是 MySQL 官方邏輯備份工具,支援全庫/單表/結構/數據/WHERE 條件過濾、壓縮、遠程傳輸等豐富功能。本文系統整理核心參數、常用場景範例、效能優化選項、導入還原策略,以及 SELECT INTO OUTFILE 替代方案對比。

一、基礎語法

mysqldump [OPTIONS] database [tables]
mysqldump [OPTIONS] --databases db1 [db2...]
mysqldump [OPTIONS] --all-databases

二、核心常用參數速查表

參數作用推薦場景
-u, --user用戶名必填
-p, --password密碼(建議不帶值,交互輸入)必填
-h, --host主機地址遠程備份
-P, --port端口非 3306
--single-transactionInnoDB 一致性備份(啟動事務+快照)線上熱備份必加
--master-data=2輸出 CHANGE MASTER 註釋(binlog 位置)主從搭建
--flush-logs備份前切割 binlog配合主從
--routines備份存儲過程/函數完整備份
--triggers備份觸發器完整備份
--events備份事件調度器完整備份
--hex-blob二進制欄位用十六進制導出含 BLOB/BINARY
--quick, -q流式讀取,不緩存整個結果集大表必加
--opt啟用一組優化選項(含 --quick, --add-drop-table 等)預設開啟
--no-data, -d僅導出結構(DDL)遷移結構
--no-create-info, -t僅導出數據(INSERT)數據遷移
--add-drop-table每個 CREATE TABLE 前加 DROP TABLE IF EXISTS重複導入安全
--complete-insert, -cINSERT 含欄位名跨版本/異構導入
--where過濾條件增量/分片導出
--tab=path導出兩檔:.sql(DDL) + .txt(數據,可指定分隔符)大量數據載入
--fields-terminated-by=,數據檔分隔符(配合 --tab)CSV 匯入
--compress客戶端/服務端壓縮傳輸跨網段備份

三、經典使用場景範例

1. 全庫備份(生產標準命令)

mysqldump -u root -p --single-transaction --master-data=2 --routines --triggers --events --hex-blob --quick \
  my_database | gzip > my_database_$(date +%F_%H%M).sql.gz

2. 單表備份

mysqldump -u root -p --single-transaction my_database my_table > my_table.sql

3. 僅導出結構(DDL)

mysqldump -u root -p --no-data --add-drop-table my_database > schema.sql

4. 僅導出數據(INSERT)

mysqldump -u root -p --no-create-info my_database > data.sql

5. WHERE 條件過濾(增量/分片)

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

6. 導出為 CSV(配合 --tab)

mysqldump -u root -p --tab=/tmp/export --no-create-info --fields-terminated-by=, my_database orders

產生 /tmp/export/orders.txt(CSV)與 /tmp/export/orders.sql(DDL)。

7. 遠程直接導入另一實例

mysqldump -h host1 -u root -p --single-transaction db1 | mysql -h host2 -u root -p db2

四、導入還原策略

1. 標準導入

mysql -u root -p db_name < backup.sql

2. 壓縮檔直接導入

gunzip < backup.sql.gz | mysql -u root -p db_name

3. 大檔案分批導入(避免事務過大)

# 使用 sed/awk 分割,或工具 pt-fifo-split
# 或在導入時關閉自動提交、唯一檢查、外鍵檢查
mysql -u root -p db_name -e "SET autocommit=0; SET unique_checks=0; SET foreign_key_checks=0; SOURCE backup.sql; COMMIT; SET unique_checks=1; SET foreign_key_checks=1; SET autocommit=1;"

五、效能優化建議

  • 大表必加 --quick(預設 --opt 已含),避免客戶端 OOM。
  • InnoDB 熱備份必加 --single-transaction,保證一致性不鎖表。
  • 備份輸出導向 gzip 管道,節省磁碟 I/O 與空間。
  • 定期驗證備份可用性:建立測試庫導入、校驗行數/檢查和。
  • 跨版本遷移加 --complete-insert、--hex-blob、--compatible=mysql40 等相容選項。

六、SELECT INTO OUTFILE 替代方案

適用於「無需 DDL、需高效導出文本、支援 JOIN 複雜查詢」場景:

SELECT * INTO OUTFILE '/tmp/orders.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM orders WHERE order_date >= '2024-01-01';
  • 需 FILE 權限,輸出目錄受 secure_file_priv 限制。
  • 可作為報表生成器,支援任意 JOIN/聚合。
  • 導入對應 LOAD DATA INFILE。

七、總結

mysqldump 以靈活參數組合覆蓋 95% 邏輯備份場景。生產環境請確立「每日全量 + Binlog 增量」備份策略,配合 --single-transaction --master-data=2 --quick | gzip 標準命令,並建立自動化驗證流程。大數據量遷移優先考慮 --tab + LOAD DATA 或物理備份工具(xtrabackup、mydumper)。

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