C:\mysql (已加入 PATH)root / 密碼:123456database_nameD:\backup_20240115.sql# 基本備份 (結構+數據)
mysqldump -u root -p123456 database_name > D:\backup_20240115.sql
# 常用增強參數
mysqldump -u root -p123456 \
--single-transaction \ # InnoDB 熱備,不鎖表
--routines --triggers \ # 包含存儲過程/觸發器
--events \ # 包含事件調度器
--master-data=2 \ # 記錄 Binlog 位置 (從庫搭建用)
--hex-blob \ # 二進位欄位導出為 16 進位
database_name > D:\backup_20240115.sql
# 1. 刪除舊庫 (謹慎!)
mysqladmin -u root -p123456 drop database_name
# 2. 建立新庫 (字符集建議顯式指定)
mysqladmin -u root -p123456 create database_name
# 3. 導入備份
mysql -u root -p123456 database_name < D:\backup_20240115.sql
| 項目 | 說明 |
|---|---|
| 密碼安全 | 命令列明文密碼會殘留在歷史記錄。生產環境請用 --defaults-extra-file 指定密碼文件,或環境變量 MYSQL_PWD (5.6+ 棄用)。 |
| 備份文件編碼 | 確保備份文件為 UTF-8 (BOM)。導入時若亂碼,檢查 SET NAMES 或 --default-character-set。 |
| 大文件導入 | > 500MB 建議用 source 命令在 mysql shell 內分批,或拆分文件。 |
| 版本相容 | 高版本備份導入低版本可能報錯 (如 8.0 → 5.7)。建議同版本或用兼容模式 --compatible=mysql57。 |
| GTID 啟用庫 | 還原前需 SET @@GLOBAL.gtid_purged=''; 或使用 --set-gtid-purged=OFF 導出。 |
@echo off
set DATE_STR=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
set BACKUP_DIR=D:\mysql_backup
set DB_NAME=my_database
mkdir %BACKUP_DIR% 2>nul
mysqldump -u root -p123456 --single-transaction --routines --triggers --events %DB_NAME% > %BACKUP_DIR%\%DB_NAME%_%DATE_STR%.sql
:: 保留最近 7 天
forfiles /p %BACKUP_DIR% /m %DB_NAME%_*.sql /d -7 /c "cmd /c del @path"
echo [%DATE% %TIME%] Backup completed. >> %BACKUP_DIR%\backup.log
配合 Windows 任務計畫程式每日執行。
# 快速驗證:只檢查語法不導入
mysql -u root -p123456 --execute="SET @dummy=0;" < D:\backup_20240115.sql
# 或建立臨時庫導入測試
mysqladmin -u root -p123456 create test_restore
mysql -u root -p123456 test_restore < D:\backup_20240115.sql
# 抽查幾張表行數
mysqladmin -u root -p123456 drop test_restore