Press "Enter" to skip to content

LinuxVPS自动备份脚本(sftp版)

网络上大家都在使用的一个自动备份的脚本(原作者应该是猫言猫语),我自己也在用,经过无数次的使用后发现此脚本存在着一定的BUG(长期使用此脚本的朋友肯定知道BUG在哪里)。自己把脚本改了一下,加入了一些判断,使脚本更加智能化。

改进内容:
1,避免了忘记检查本机是否安装FTP软件导致备份失败的BUG;
2,避免了本机忘记创建/home/backup目录导致备份失败的BUG;
3,去掉了将数据库发送至邮箱的过程;
4,网站文件和数据库不再分开,将压缩至同一个压缩包内;

直接把以下脚本复制到/root/backup.sh

#!/bin/bash
#你要修改的地方从这里开始
MYSQL_BIN=/usr/bin/mysql
MYSQL_DUMP=/usr/bin/mysqldump
MYSQL_USER=root                         #mysql用户名
MYSQL_PASS=zhukun.net                   #mysql密码
SFTP_USER=www.zhukun.net                #ftp用户名
SFTP_PASS=123456789                     #ftp密码
SFTP_IP=11.11.11.11                     #ftp地址
SFTP_backup=upload/www.zhukun.nert      #ftp上存放备份文件的目录,这个要自己得ftp上面建的
WEB_DATA=/opt/apps/     #本地要备份的网站数据
#你要修改的地方从这里结束

#if [ ! -f /usr/bin/ftp ]; then
#    yum install ftp -y
#fi
if [ ! -f /usr/bin/lftp ]; then
    apt install lftp -y
fi
if [ ! -d /opt/backup ]; then
    mkdir /opt/backup
fi

#定义备份文件的名字
DataBakName=Data_$(date +"%Y%m%d").tar.gz
OldData=Data_$(date -d -5day +"%Y%m%d").tar.gz

#删除本地3天前的数据
rm -rf /opt/backup/Data_$(date -d -3day +"%Y%m%d").tar.gz
cd /opt/backup

#导出数据库,一个数据库一个压缩文件
for db in `$MYSQL_BIN -u$MYSQL_USER -p$MYSQL_PASS -B -N -e 'SHOW DATABASES' | xargs`; do
    ($MYSQL_DUMP -u$MYSQL_USER -p$MYSQL_PASS ${db} -q --skip-lock-tables | gzip -9 - > ${db}.sql.gz;
    echo dumped /home/backup/${db}.sql.gz)
done

#将导出的数据库和网站目录压缩为一个文件
tar zcf /opt/backup/$DataBakName $WEB_DATA /home/backup/*.sql.gz

#删除本地已导出的数据库
rm -rf /opt/backup/*.sql.gz

#上传到FTP空间,删除FTP空间5天前的数据
#ftp -v -n $FTP_IP << END
#user $FTP_USER $FTP_PASS
#type binary
#cd $FTP_backup
#delete $OldData
#put $DataBakName
#bye
#END

# 如果你使用的SFTP, 请使用此方法.
lftp -u "$SFTP_USER,$SFTP_PASS" sftp://$SFTP_IP -e "cd $SFTP_backup; put $DataBakName; delete $OldData; bye"

推荐每天凌晨6点左右自动执行备份命令,因为此时访客最少,服务器资源最为轻松

[root@bear ~]# chmod +x /root/backup.sh
[root@bear ~]# crontab -e
00 06 * * * /root/backup.sh
[root@bear ~]# service crond restart
[root@bear ~]# chkconfig --level 2345 crond on
Leave a Reply

Your email address will not be published. Required fields are marked *