mysqldump 是 MySQL 官方邏輯備份工具,source 是客戶端匯入指令。兩者結合可覆蓋 90% 的備份、遷移、同步場景。本文系統整理常用參數、進階過濾技巧與避坑指南。
mysqldump [options] db_name [tbl_name ...]
mysqldump [options] --databases db_name ...
mysqldump [options] --all-databases
| 需求 | 指令範例 | 關鍵參數說明 |
|---|---|---|
| 匯出整庫 | mysqldump -u root -p dbname > backup.sql | -u 用戶 -p 密碼 |
| 匯出單表 | mysqldump -u root -p dbname tbl > tbl.sql | 資料庫後接表名 |
| 匯出多表 | mysqldump -u root -p dbname t1 t2 > multi.sql | 空格分隔多表名 |
| 僅匯出結構 | mysqldump -u root -p -d --add-drop-table dbname > schema.sql | -d 無資料;--add-drop-table 先 DROP 再 CREATE |
| 排除特定表 | mysqldump -u root -p dbname --ignore-table=dbname.logs --ignore-table=dbname.tmp > backup.sql | --ignore-table=db.tbl 可重複多次 |
| 遠端主機匯出 | mysqldump -h 192.168.1.100 -P 3306 -u root -p dbname > backup.sql | -h host -P port |
| InnoDB 熱備一致性 | mysqldump -u root -p --single-transaction --master-data=2 dbname > backup.sql | --single-transaction 關鍵;--master-data 記錄 binlog 位點 |
| 大表避免記憶體暴漲 | mysqldump -u root -p --quick --max_allowed_packet=512M dbname > backup.sql | --quick 串流輸出;調大封包 |
# 加上 --skip-lock-tables
mysqldump -u user -p dbname --skip-lock-tables > backup.sql
mysql -u root -p
mysql> USE target_db;
mysql> SOURCE /path/to/backup.sql;
mysql -u root -p target_db < backup.sql
# 或指定字元集避免亂碼
mysql -u root -p --default-character-set=utf8mb4 target_db < backup.sql
gunzip < backup.sql.gz | mysql -u root -p target_db
# 或
zcat backup.sql.gz | mysql -u root -p target_db
# 匯出時已篩選最佳;若需從全量檔提取單表:
sed -n '/^CREATE TABLE `tbl_name`/,/^UNLOCK TABLES;/p' backup.sql > tbl_only.sql
# 或使用 mysqldump 重新匯出該表
--default-character-set=utf8mb4--default-character-set=utf8mb4file backup.sql 應顯示 UTF-8SET autocommit=0; 導入後 COMMIT;SET unique_checks=0; SET foreign_key_checks=0; 導入後恢復max_allowed_packet、innodb_buffer_pool_sizeLOAD DATA INFILE 替代 INSERT 大量資料參考《MySQL 資料備份與還原:mysqldump、mysqlhotcopy 與物理複製全攻略》一文。
@echo off
set host=localhost
set user=root
set pwd=your_password
set db=my_db
set backup_dir=D:\db_backup
set date_str=%date:~0,4%%date:~5,2%%date:~8,2%
mysqldump -h%host% -u%user% -p%pwd% --single-transaction --quick %db% > "%backup_dir%\%db%_%date_str%.sql"
if %errorlevel% neq 0 (
echo Backup failed!
exit /b 1
)
echo Backup completed: %db%_%date_str%.sql
掌握 mysqldump 精準參數與 source/管道導入技巧,讓資料遷移、備份還原、環境同步成為標準化、可自動化的常規操作。