Linux 下 mysqldump + crontab 自動異地備份 Shell 腳本
#!/bin/bash
## 來源資料庫(生產庫)連線資訊
SOURCE_USER=-uroot
SOURCE_HOST=-h10.10.10.12
SOURCE_PASS=-padministrator
## 目標資料庫(備份庫)連線資訊
BAK_USER=-uroot
BAK_HOST=-h10.10.10.22
BAK_PASS=-padministrator
## 匯出來源庫指定表並產生 SQL 檔
/var/mysql/bin/mysqldump --add-drop-table --opt $SOURCE_USER $SOURCE_HOST $SOURCE_PASS STATION username > /tmp/username.sql
/var/mysql/bin/mysqldump --add-drop-table --opt $SOURCE_USER $SOURCE_HOST $SOURCE_PASS STATION files > /tmp/files.sql
## 匯入到備份庫
/var/mysql/bin/mysql $BAK_USER $BAK_HOST $BAK_PASS STATION < /tmp/username.sql
/var/mysql/bin/mysql $BAK_USER $BAK_HOST $BAK_PASS STATION < /tmp/files.sql
部署自動化
- 儲存為
/usr/local/bin/mysql_auto_backup.sh,給予執行權限:chmod +x
- 編輯 crontab:
crontab -e
- 加入排程(例:每天凌晨 2:30 執行):
30 2 * * * /usr/local/bin/mysql_auto_backup.sh >> /var/log/mysql_backup.log 2>&1
生產環境建議強化
- 密碼**不要寫在腳本**,使用
--defaults-extra-file 指向權限 600 的 .my.cnf
- 加入錯誤判斷與通知(郵件/Slack/Telegram)
- 備份檔壓縮(
gzip)並上傳至異地儲存(S3/OSS/NFS)
- 定期演練**還原測試**,未測試的備份不算備份
- 考慮使用
Percona XtraBackup 熱備份(不鎖表、支援增量)
關鍵參數說明
--add-drop-table:匯入前先 DROP TABLE,避免重複錯誤
--opt:啟用 --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset 組合,提升匯出入效能
--single-transaction(InnoDB):一致性備份不鎖表,建議加上