備份模式對比
| 模式 | 命令範例 | 適用場景 |
| 單表 | mysqldump -u user -p db table > table.sql | 單表遷移、結構變更測試 |
| 單庫 | mysqldump -u user -p db > db.sql | 常規備份、庫級遷移 |
| 全庫 | mysqldump -u user -p --all-databases > all.sql | 實例遷移、升級前全備 |
核心參數速查
-e, --extended-insert # 批量 INSERT,導入快 20 倍+
--single-transaction # InnoDB 熱備不鎖表(必加)
--master-data=2 # 記錄 Binlog 位置(CHANGE MASTER 註解)
-R, --routines # 導出預存程序/函數
--triggers # 導出觸發器(預設開啟)
--hex-blob # 二進制欄位十六進制導出
--quick # 大表流式讀取,不緩存全量結果集
--set-gtid-purged=OFF # 避免 GTID 污染目標庫(5.6+)
還原兩種方式
方式一:Shell 管道(推薦自動化)
mysql -u root -p dbname < backup.sql
# 遠程
mysql -h remote_host -u root -p dbname < backup.sql
方式二:MySQL 客戶端 source 命令
mysql -u root -p
USE dbname;
SOURCE /path/backup.sql;
避坑清單
- 備份檔無
DROP/CREATE DATABASE 時,還原前需手動 DROP DATABASE IF EXISTS db; CREATE DATABASE db;
- 大檔導入調大
max_allowed_packet(如 1G)與 innodb_log_file_size
- 字符集不一致導致亂碼:導出/導入指定
--default-character-set=utf8mb4
- 外鍵約束導入失敗:
SET FOREIGN_KEY_CHECKS=0; 導入後再開啟
一鍵備份別名(加入 ~/.bashrc)
alias mysqlbak='mysqldump --single-transaction --master-data=2 --routines --triggers --hex-blob --quick -u root -p'
# 用法:mysqlbak dbname > db_$(date +%F).sql