网络上大家都在使用的一个自动备份的脚本(原作者应该是猫言猫语),我自己也在用,经过无数次的使用后发现此脚本存在着一定的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"