2016/06/15

网站数据备份


结合 crontab 指令,每天凌晨5点进行数据备份。备份脚本名称 backup.sh。

添加 crontab 定时任务

0 5 * * * bash backup.sh

备份脚本功能:

1.备份指定目录。 使用 tar 指令

2.备份指定数据库。 使用 mysqldump 指令

3.将备份后的数据上传到ftp。 使用 lftp 指令

4.删除7天前的备份数据。 可以手动修改天数

直接把源码拷贝到文件执行即可

#!/bin/bash

#存放备份目录
Backup_Home="/data/backup/www/"
#备份目录
Backup_Dir=("/data/www/6761web/6761web_trunk/Backup" "/data/www/6761web/6761web_trunk/web/Uploads")
#备份数据库
Backup_Database=("6761web")

#mysqldump脚步路径
MySQL_Dump="/usr/local/mysql/bin/mysqldump"
#mysql账号密码
MYSQL_UserName='root'
MYSQL_PassWord='root'

#是否将备份上传到ftp 1是 0不是
Enable_FTP=0
#上传到ftp哪个目录
FTP_Dir="backup/www"
#ftp参数
FTP_Host='1.2.3.4:21'
FTP_Username='test'
FTP_Password='test'

#备份文件格式
TodayWWWBackup=www-*-$(date +"%Y%m%d").tar.gz
TodayDBBackup=db-*-$(date +"%Y%m%d").sql

#删除前7天备份数据
OldWWWBackup=www-*-$(date -d -7day +"%Y%m%d").tar.gz
OldDBBackup=db-*-$(date -d -7day +"%Y%m%d").sql

#备份目录
Backup_Dir()
{
    Backup_Path=$1
    Dir_Name=`echo ${Backup_Path##*/}`
    Pre_Dir=`echo ${Backup_Path}|sed 's/'${Dir_Name}'//g'`
    tar zcf ${Backup_Home}www-${Dir_Name}-$(date +"%Y%m%d").tar.gz -C ${Pre_Dir} ${Dir_Name}
}
#备份mysql 每次备份会生成新的 binary log 日志
Backup_Sql()
{
    OPTION="--flush-logs --master-data=2 -u$MYSQL_UserName -p$MYSQL_PassWord $1 --add-drop-database"
    ${MySQL_Dump} $OPTION > ${Backup_Home}db-$1-$(date +"%Y%m%d").sql
}

#校验 mysqldump 指令是否存在
if [ ! -f ${MySQL_Dump} ]; then  
    echo "mysqldump command not found.please check your setting."
    exit 1
fi
#校验 lftp 指令是否存在
if [ ${Enable_FTP} = 1 ]; then
    type lftp >/dev/null 2>&1 || { echo >&2 "lftp command not found. Install: centos:yum install lftp,debian/ubuntu:apt-get install lftp."; exit 1; }
fi
#创建备份目录
if [ ! -d ${Backup_Home} ]; then  
    mkdir -p ${Backup_Home}
fi

#开始备份文件
echo "Backup website files..."
for dd in ${Backup_Dir[@]};do
    Backup_Dir ${dd}
done

#开始备份数据库
echo "Backup Databases..."
for db in ${Backup_Database[@]};do
    Backup_Sql ${db}
done

#删除旧备份数据
echo "Delete old backup files..."
rm -f ${Backup_Home}${OldWWWBackup}
rm -f ${Backup_Home}${OldDBBackup}

#将备份数据上传到ftp
if [ ${Enable_FTP} = 1 ]; then
    echo "Uploading backup files to ftp..."
    cd ${Backup_Home}
    lftp ${FTP_Host} -u ${FTP_Username},${FTP_Password} << EOF
mkdir -p ${FTP_Dir}
cd ${FTP_Dir}
mrm ${OldWWWBackup}
mrm ${OldDBBackup}
mput ${TodayWWWBackup}
mput ${TodayDBBackup}
bye
EOF

echo "complete."
else
    echo "complete."
fi