Sunday, 17th January 2010
by 木心馬搬到DreamHost,折騰一天,網上找的資料不全不理想,只好邊學邊搞弄出一段備份腳本,功能如下:
Ⅰ、能對擁有shell權限用戶的所有網站文件和數據庫打包備份。
Ⅱ、同時將備份文件傳送到遠程FTP異地同步保存。
Ⅲ、刪除本地及遠程FTP上過期備份文件。
打完收工。
更新:(2010.01.22)先判斷FTP服務器能否Ping通后再連接。除非本地備份時出錯或者FTP服務器連不上,否則不會提示任何異常信息。
——————— 告訴你以下就是腳本代碼的偉大分割線 ———————
# !/bin/bash
# .sh File Permissions Should be Set to "755" / Shell腳本文件的權限應設置成“755”
# Written by madeinjune.net
# Define Dreamhost Account / Dreamhost服務器上的用戶名
USERNAME="Dreamhost"
# Define Dreamhost Local Backup Folder / 本地備份文件夾
BACKUP_FOLDER="dhbackups"
# Define MySQL Temp Folder / 存放數據庫文件的臨時文件夾
MYSQL_TEMP="dhmysql"
# Define Shell folder / 存放Shell腳本的文件夾
SHELL="shell"
# Define Backup Timestamp Suffix / 定義時間戳,Dreamhost和北京時間相差16小時
TIMESTAMP=$(date -d "+16 hours" +%Y%m%d)"_"$(date -d "+16 hours" +%H%M%S)
# Define Backup File Name / 備份文件名
BACKUP="dreamhost_"$USERNAME"_"$TIMESTAMP
# Define Remote FTP Backup Folder / 定義遠程FTP存放備份文件二級目錄,OLD為7天前的目錄
FTP_NEW=$(date -d "+16 hours" +%Y%m%d)
FTP_OLD=$(date -d "-152 hours" +%Y%m%d)
# Define Domain Name or Specific Folder Name / 指定要備份的域名或者根目錄下的文件夾名稱
DOMAIN1="domain1.com"
DOMAIN2="domain2.net"
DOMAIN3="domain3.org"
# Define MySQL / 設置MySQL數據庫
MYSQL1_HOST="mysql.domain.com"
MYSQL1_NAME="databasename"
MYSQL1_USER="username"
MYSQL1_PASS="password"
# Define Remote FTP / 設置遠程備份FTP登錄信息及放置備份文件的目錄
FTP1_HOST="ftp.domain.com"
FTP1_USER="ftp"
FTP1_PASS="pass"
FTP1_FOLDER="dhbackups"
## Begin Backup / 備份開始
# Go to User’s Root Folder / 切換到用戶所在根目錄
cd /home/$USERNAME
# Create Local Backup Folder / 判斷備份文件夾是否存在,如不存在則新建
[[ -d $BACKUP_FOLDER ]] || mkdir $BACKUP_FOLDER
# Create MySQL Temp Folder / 判斷MySQL臨時文件夾是否存在,如不存在則新建
[[ -d $MYSQL_TEMP ]] || mkdir $MYSQL_TEMP
## Dump MySQL Database / 提取MySQL數據
mysqldump -u$MYSQL1_USER -p$MYSQL1_PASS -h$MYSQL1_HOST $MYSQL1_NAME > $MYSQL_TEMP/$MYSQL1_HOST-$MYSQL1_NAME.sql
# echo “MySQL Database Downloaded”
## Create Backup File / 打包備份文件
tar -zcf $BACKUP.tar.gz $SHELL $MYSQL_TEMP $DOMAIN1 $DOMAIN2 $DOMAIN3
# echo “Backup File Created”
# Move Backup File to Backup Folder / 移動備份文件到指定備份文件夾
mv $BACKUP.tar.gz $BACKUP_FOLDER
# Delete Temp Folder and Old Archive Files / 刪除臨時文件及7天前的備份文件
rm -r $MYSQL_TEMP
cd /home/$USERNAME/$BACKUP_FOLDER
find -mtime +7 -delete
## Upload File to Remote FTP / 將本次備份文件上傳到遠程FTP,並刪除FTP上舊的備份文件
ping -c 3 $FTP1_HOST > /dev/null
if [ "$?" -eq "0" ]
then
ftp -i -n $FTP1_HOST <<EOF > /dev/null
user $FTP1_USER $FTP1_PASS
binary
prompt
mkdir $FTP1_FOLDER
cd $FTP1_FOLDER
mkdir $FTP_NEW
mkdir $FTP_OLD
cd $FTP_NEW
put $BACKUP.tar.gz $BACKUP.tar.gz
cd ..
cd $FTP_OLD
mdele *
cd ..
rm $FTP_OLD
close
bye
EOF
else
echo "FTP Connection Error!"
fi
# echo "Backup Finished!"

