mysqldump 是 MySQL 邏輯備份的核心工具。本文從基礎備份恢復到進階參數選項、臨時表與 HEAP 表應用,全方位解析其實戰技巧。
mysqldump -u root -p123456 tm > tm_050519.sql
mysqldump -u root -p123456 tm | gzip > tm_050519.sql.gz
mysql -u root -p123456 tm < tm_050519.sql
gzip -d < tm_050519.sql.gz | mysql -u root -p123456 tm
# 或
zcat tm_050519.sql.gz | mysql -u root -p123456 tm
| 參數 | 作用 | 備註 |
|---|---|---|
--databases / -B | 指定多個數據庫,輸出包含 CREATE DATABASE | mysqldump -B db1 db2 > all.sql |
--tables | 後續參數視為表名 | 配合 -B 可跨庫指定表 |
--no-create-db | 不輸出 CREATE DATABASE | 避免誤覆蓋目標庫 |
--no-create-info | 不輸出 CREATE TABLE | 僅導數據 |
--no-data / -d | 不導數據,僅結構 | 適合遷移結構 |
--routines / -R | 導出存儲過程/函數 | 默認不導出 |
--triggers | 導出觸發器 | 默認開啟 |
--events | 導出事件調度器 | 默認不導出 |
--single-transaction | InnoDB 熱備份一致性快照 | 生產必加,避免鎖表 |
--master-data=2 | 輸出 CHANGE MASTER 註釋 | 主從搭建必備 |
--skip-comments | 去除版本/時間等註釋 | 精簡文件 |
--compact | 精簡輸出(去註釋、去 DROP) | 等同多個 skip 組合 |
--quick / --opt | 流式讀取,不緩存全表 | 默認開啟,大表必須保持 |
--hex-blob | 二進制列用十六進制導出 | 避免編碼問題 |
# 導出 db1、db2 完整結構+數據+存儲過程+主從信息,壓縮存儲
mysqldump -u root -p --databases db1 db2 -R --master-data=2 --single-transaction | gzip > full_$(date +%F).sql.gz
# 僅導出 db1 的 t1、t2 表結構(無數據)
mysqldump -u root -p db1 --tables t1 t2 --no-data > structure.sql
CREATE TEMPORARY TABLE tmp_table (
name VARCHAR(10) NOT NULL,
value INT NOT NULL
);
-- 使用後可手動釋放
DROP TABLE tmp_table;
CREATE TEMPORARY TABLE tmp_heap (
id INT PRIMARY KEY,
data VARCHAR(100)
) ENGINE=MEMORY; -- 現代語法用 ENGINE=MEMORY
HEAP/MEMORY 限制: 不支持 BLOB/TEXT、AUTO_INCREMENT、NULL 索引;固定行長;受 max_heap_table_size 限制;崩潰數據全失,僅適用於可重算的中間結果集。
--single-transaction --master-data=2 -R --events --triggers --hex-blob。mysql -u root -p test_db < backup.sql)。mydumper/myloader 並行導出導入提速。