为避免意外,定时进行部分或全站备份是十分必要的。今天介绍的 Shell 脚本可自动打包数据库和网站文件上传至七牛、又拍、腾讯、百度网盘等云存储空间,以及 FTP/SFTP 服务器。
项目地址
支持系统
仅支持 MySQL 数据库和 CentOS 6 x64、CentOS 7 x64、Ubuntu 16.04 x64 系统。
使用方法
依赖安装
# CentOS
yum install -y wget curl git zip ftp sftp ssh sshpass
# Ubuntu
apt install -y wget curl git zip ftp sftp ssh sshpass
BIN_DIR=/usr/local/etc/
[ ! -d ${BIN_DIR} ] && mkdir -p ${BIN_DIR}
cd ${BIN_DIR}
git clone https://github.com/CHN-STUDENT/WebServerAutoBackup.git
cd WebServerAutoBackup
配置编辑
打开 config.ini
,修改 14 行为要备份的站点目录。
[WWWROOT_CONFIG]
WWWROOT_DIR=/www/wwwroot
修改 27-31 行的数据库信息。
[MYSQL_CONFIG]
MYSQL_DBS=
MYSQL_USER=
MYSQL_PASSWD=
MYSQL_SERVER=127.0.0.1
MYSQL_SERVER_PORT=3306
修改 57 行的保存天数,建议改为 3,即仅保存最近 3 天的备份。
[DAY_CONFIG]
DAY=3
修改 72-77 行的七牛云配置,将 AUTO_UPLOAD
和 AUTO_DELETE
打开,即自动上传,自动删除 3 天前的备份。
[QSHELL_CONFIG]
AUTO_UPLOAD=yes
AUTO_DELETE=yes
BUCKET=website-backup
ACCESS_Key=
SECRET_Key=
key_prefix=backup
如需上传到其他云空间,自行阅读配置文件注释,修改完毕后将文件保存。
修复错误
实际运行时提示空间不足,停止备份。df -h
后发现空间还很多,于是寻找代码错误,打开 backup.sh
,搜索错误信息定位到 229 行,发现脚本分别使用了 df
和 du -b
计算备份文件夹剩余空间与网站占用空间,两者单位并不相同,去掉 -b
参数即可。也就是修改为以下代码,随后保存文件。
wwwroot_size=`expr $(du -s ${www_dir} | awk '{ print $1 }') + ${wwwroot_size}`
测试运行
chmod a+x backup.sh && ./backup.sh
定时任务
测试正常工作后即可添加定时任务,实现自动备份并上传。
crontab -l > conf
cat >> conf <<EOF
0 2 * * * cd /usr/local/etc/WebServerAutoBackup && ./backup.sh > /root/backup/log/backup-cron.log 2>&1 &
EOF
crontab conf
rm -f conf
如有问题请在下方留言,文章转载请注明出处,详细交流请加下方群组!请大佬不要屏蔽文中广告,因为它将帮我分担服务器开支,如果能帮忙点击我将万分感谢。
用的是宝塔面板,自带这些功能
早知道我也宝塔@(笑尿)
你是什么服务器?阿里的吗??
嗯,香港轻量云@(捂嘴笑),你用的哪家?
阿里学生机@(哈哈)
看来我们半斤八两@(笑尿),其实备个案加上 CDN 还是够用的。
就是备案比较麻烦@(呵呵)
抓紧备,加不加 CDN 速度差别还是很大的
已经备了,现在是未加CDN的状态