DreamHost全站备份Shell脚本

搬到DreamHost,折腾一天,网上找的数据不全不理想,只好边学边搞弄出一段备份脚本,功能如下:

Ⅰ、能对拥有shell权限用户的所有网站文件和数据库打包备份。

Ⅱ、同时将备份文件传送到远程FTP异地同步保存。

Ⅲ、删除本地及远程FTP上过期备份文件。

打完收工。

.sh代码下载

更新:(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!"

Typewritings @ Sunday, January 17th, 2010