root@deuzqZ:~/code/hello# cat /home/backup/autobackuptoftp.sh
#!/bin/bash
#使用发送邮箱功能必须安装email发送组件
#yum install sendmail mutt
#你要修改的地方从这里开始
MYSQL_USER=root #mysql用户名
MYSQL_PASS=passwd #mysql密码
MAIL_TO=test@gmail.com #数据库发送到的邮箱
FTP_IP=fto.cloud.top #ftp地址
FTP_PROT=21 #ftp端口
FTP_USER=user #ftp用户名
FTP_PASS=password #ftp密码
FTP_BACKUP=/Backup #ftp上存放备份文件的目录,需要在ftp上面建立
WEB_DATA=/home/wwwroot #备份的网站数据
NGINX_CONF=/usr/local/nginx/conf #nginx配置文件夹
CERT_DATA=/home/www/cert #证书文件夹
WEB_BACKUP=/home/backup #本地备份路径
#你要修改的地方从这里结束
#定义备份文件名和旧备份文件名
DataBakName=Data_$(date +"%Y%m%d").tar.gz
WebBakName=Web_$(date +%Y%m%d).tar.gz
NginxBakName=Nginx_$(date +"%Y%m%d").tar.gz
CertBakName=Cert_$(date +"%Y%m%d").tar.gz
OldData=Data_$(date -d -5day +"%Y%m%d").tar.gz
OldWeb=Web_$(date -d -5day +"%Y%m%d").tar.gz
OldNginx=Nginx_$(date -d -5day +"%Y%m%d").tar.gz
OldCert=Cert_$(date -d -5day +"%Y%m%d").tar.gz
#删除本地3天前的数据
mkdir -p $WEB_BACKUP
rm -rf $WEB_BACKUP/Data_$(date -d -3day +"%Y%m%d").tar.gz $WEB_BACKUP/Web_$(date -d -3day +"%Y%m%d").tar.gz $WEB_BACKUP/Nginx_$(date -d -3day +"%Y%m%d").tar.gz $WEB_BACKUP/Cert_$(date -d -3day +"%Y%m%d").tar.gz $WEB_BACKUP/Other_$(date -d -3day +"%Y%m%d").tar.gz
cd $WEB_BACKUP
#导出数据库,一个数据库一个压缩文件
for db in `/usr/local/mysql/bin/mysql -u$MYSQL_USER -p$MYSQL_PASS -B -N -e 'SHOW DATABASES' | xargs`; do
(/usr/local/mysql/bin/mysqldump -u$MYSQL_USER -p$MYSQL_PASS --single-transaction ${db} | gzip -9 - > ${db}.sql.gz)
done
#压缩数据库文件为一个文件
tar zcf $WEB_BACKUP/$DataBakName $WEB_BACKUP/*.sql.gz
rm -rf $WEB_BACKUP/*.sql.gz
#发送数据库到Email,如果数据库压缩后太大,请注释这行
#echo "主题:数据库备份" | mutt -a $WEB_BACKUP/$DataBakName -s "内容:数据库备份" $MAIL_TO
#压缩网站数据
tar zcf $WEB_BACKUP/$WebBakName $WEB_DATA
#压缩nginx配置文件
tar zcf $WEB_BACKUP/$NginxBakName $NGINX_CONF
#压缩证书文件
tar zcf $WEB_BACKUP/$CertBakName $CERT_DATA
#上传到FTP空间,删除FTP空间5天前的数据
#如FTP服务器不支持主动模式,请在type binary后面增加passive参数以开启被动模式。
ftp -v -n $FTP_IP $FTP_PROT<< END
user $FTP_USER $FTP_PASS
type binary
passive
cd $FTP_BACKUP
delete $OldData
delete $OldWeb
delete $OldNginx
delete $OldCert
put $DataBakName
put $WebBakName
put $NginxBakName
put $CertBakName
bye
END
#crontab -e //每天凌晨五点执行一次备份
0 5 * * 0 bash /home/backup/autobackuptoftp.sh
文章评论