核心語法
mysqldump -u user -p [db_name] [tbl_name...] > dump.sql
常用場景
備份單庫結構+數據
mysqldump -u root -p mydatabase > mydatabase.sql
備份單表
mysqldump -u root -p mydatabase employee > employee.sql
備份所有庫
mysqldump -u root -p --all-databases > alldb.sql
僅備份結構
mysqldump -u root -p --no-data mydatabase > structure.sql
遠程備份到另一服務器(管道流式,無落地文件)
mysqldump -u root -p --databases mydatabase | \
mysql -u backup -p -h remote.server.com
還原
# 單庫還原
mysql -u root -p mydatabase < mydatabase.sql
# 導入單表到現有庫
mysql -u root -p mydatabase < employee.sql
生產環境增強參數(推薦)
mysqldump -u root -p \
--single-transaction \ -- InnoDB 一致性快照,無鎖
--routines --triggers \ -- 導出存儲過程/觸發器/事件
--events \
--hex-blob \ -- 二進制列用十六進制
--default-character-set=utf8mb4 \
--extended-insert \ -- 批量 INSERT,導入快
--quick \ -- 流式讀取,不緩存全表結果
--master-data=2 \ -- 記錄 Binlog 位置 (CHANGE MASTER TO 註釋)
--flush-logs \ -- 切換 Binlog,配合增量備份
mydatabase > mydatabase_full_$(date +%F).sql
增量備份策略
- 全量備份時加
--flush-logs --master-data=2,記錄 Binlog 位置。
- 增量備份:
mysqlbinlog --start-position=XXX mysql-bin.00000N > inc.sql。
- 恢復:先導入全量,再按順序回放增量 Binlog。
大文件導入優化
mysql -u root -p --max_allowed_packet=100M --net_buffer_length=100K \
--default-character-set=utf8mb4 mydatabase < dump.sql