结合 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