MENU

自动定时进行全站备份并上传至主流云存储

2019 年 07 月 01 日 • 阅读: 307 • 脚本

为避免意外,定时进行部分或全站备份是十分必要的。今天介绍的 Shell 脚本可自动打包数据库和网站文件上传至七牛、又拍、腾讯、百度网盘等云存储空间,以及 FTP/SFTP 服务器。

项目地址

WebServerAutoBackup

支持系统

仅支持 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_UPLOADAUTO_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 行,发现脚本分别使用了 dfdu -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
最后编辑于: 2019 年 08 月 02 日
添加新评论

已有 9 条评论
  1. Kevan Kevan     MacOS /    Google Chrome

    用的是宝塔面板,自带这些功能

    1. LOGI LOGI     Android Oreo /    Google Chrome

      @Kevan早知道我也宝塔@(笑尿)

    2. Xin Xin     Windows 7 /    Google Chrome

      @LOGI你是什么服务器?阿里的吗??

    3. LOGI LOGI     Windows 10 /    Google Chrome

      @Xin嗯,香港轻量云@(捂嘴笑),你用的哪家?

    4. Xin Xin     Windows 7 /    Google Chrome

      @LOGI阿里学生机@(哈哈)

    5. LOGI LOGI     Windows 10 /    Google Chrome

      @Xin看来我们半斤八两@(笑尿),其实备个案加上 CDN 还是够用的。

    6. Xin Xin     Windows 7 /    Google Chrome

      @LOGI就是备案比较麻烦@(呵呵)

    7. LOGI LOGI     Android Oreo /    Google Chrome

      @Xin抓紧备,加不加 CDN 速度差别还是很大的

    8. Xin Xin     Windows 7 /    Google Chrome

      @LOGI已经备了,现在是未加CDN的状态