腳本核心功能
- 支援全量備份(週日)與增量備份(其餘天)切換。
- 檔案系統與 MySQL 全庫同步備份。
- 備份文件自動上傳至指定 FTP 伺服器(支援 lftp/ncftp)。
- 失敗郵件報警通知管理員。
關鍵配置區段
### System Setup ###
DIRS="/home/xxxx" # 要備份的本地目錄
BACKUP=/tmp/backup.$$
NOW=$(date +"%Y-%m-%d")
INCFILE="/home/xxxx" # 增量備份快照文件
DAY=$(date +"%u") # 週幾 (1-7)
FULLBACKUP="7" # 週日全量備份
### MySQL Setup ###
MUSER="chaos"; MPASS="password"; MHOST="host"
MYSQL="$(which mysql)"; MYSQLDUMP="$(which mysqldump)"; GZIP="$(which gzip)"
### FTP Setup ###
FTPD="/backup/xxxx/incremental" # 增量備份遠程目錄
FTPU="chaos"; FTPP="password"; FTPS="xxx.xxx.com"
# 全量備份時 FTPD 自動切換為 "/backup/xxxx/full"
### Notification ###
EMAILID="admin@example.com"
備份邏輯流程
- 建立臨時備份目錄
$BACKUP。
- 判斷
$DAY == $FULLBACKUP 決定全量/增量:
全量:tar -zcvf $BACKUP/fs-full-$NOW.tar.gz $DIRS
增量:tar -g $INCFILE -zcvf $BACKUP/fs-i-$NOW-$i.tar.gz $DIRS(-g 指定增量快照文件)。
- 遍歷
SHOW DATABASES 逐庫導出:
mysqldump -u $MUSER -h $MHOST -p$MPASS $db | gzip -9 > $BACKUP/mysql-$db.$NOW-$(date +%T).gz
- 用
lftp 登入 FTP,建立日期子目錄,mput * 上傳所有備份文件。
- 檢查 FTP 返回碼:成功刪除本地臨時文件;失敗發送郵件報警。
部署建議
- 修改腳本中路徑、帳號密碼、郵件地址後放入
/etc/cron.daily/ 或 crontab -e 設定每日執行。
- 確保伺服器安裝
lftp 或 ncftp、mail 指令可用。
- 生產環境建議密碼寫在
.my.cnf 或單獨配置文件,腳本引用避免明文。