C:\MySQLroot / 123456database_nameD:\backup_20240115.sql
cd /d C:\MySQL\bin
mysqldump -u root -p123456 --databases database_name > D:\backup_20240115.sql
關鍵參數:
--databases:輸出含 CREATE DATABASE / USE,還原更方便--single-transaction:InnoDB 熱備份不鎖表(必加)--routines --triggers --events:備份存儲過程/觸發器/事件--master-data=2:輸出 CHANGE MASTER TO 註解,支援基於備份搭建從庫--hex-blob:二進制欄位十六進制輸出,避免字符集問題--compress:網路傳輸壓縮
mysqldump -u root -p123456 database_name table1 table2 > D:\backup_tables.sql
mysqldump -u root -p123456 --all-databases > D:\backup_all.sql
mysqldump -u root -p123456 --no-data database_name > D:\backup_schema.sql
# 登入 MySQL 建庫
mysql -u root -p123456 -e "CREATE DATABASE database_name CHARACTER SET utf8mb4;"
# 導入
mysql -u root -p123456 database_name < D:\backup_20240115.sql
mysql -u root -p123456 -e "DROP DATABASE database_name; CREATE DATABASE database_name CHARACTER SET utf8mb4;"
mysql -u root -p123456 database_name < D:\backup_20240115.sql
mysql -u root -p123456 database_name < D:\backup_tables.sql
net stop MySQL → 複製 datadir 整個目錄 → net start MySQL
$date = Get-Date -Format "yyyyMMdd_HHmm"
$bakFile = "D:\backup\db_$date.sql"
$zipFile = "D:\backup\db_$date.zip"
& "C:\MySQL\bin\mysqldump.exe" -u root -p123456 `
--single-transaction --routines --triggers --events --hex-blob `
--databases database_name > $bakFile
Compress-Archive -Path $bakFile -DestinationPath $zipFile -Force
Remove-Item $bakFile
# 保留近 7 天
Get-ChildItem D:\backup\db_*.zip | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-7) } | Remove-Item
配合 Windows 任務排程器每日執行。
> 重導向預設 UTF-16,MySQL 讀取報錯。解決:cmd /c "mysqldump ... > file.sql" 或 Out-File -Encoding utf8。SET FOREIGN_KEY_CHECKS=0; SET UNIQUE_CHECKS=0; SET AUTOCOMMIT=0; 導入後恢復。SELECT, LOCK TABLES, SHOW VIEW, TRIGGER, PROCESS 等權限。「沒測試過恢復的備份,不是備份,是廢紙。」