自动备份 VPS 网站数据到 Dropbox 折腾记录

网上教程一堆,看着简单,不过自己技术太菜,折腾到符合自己需求要费不少功夫,简单记录一下。

Dropbox 准备

登录 Dropbox,打开 Apps 页面,点击 Create App 按钮,创建一个 App

 549-dropbox-app

获取 Access token,点击 Generate 获取备用。

 549-dropbox-app-token

接着 SSH 登录 VPS 获取最新的 Dropbox Uploader 脚本

git clone https://github.com/andreafabrizi/Dropbox-Uploader.git
chmod +x /root/Dropbox-Uploader/dropbox_uploader.sh
/root/Dropbox-Uploader/dropbox_uploader.sh info

根据提示输入 Access token,Dropbox 绑定成功。再次运行 ./dropbox_uploader.sh info 可以看到绑定的 Dropbox 账户信息。

 549-dropbox-app-info

创建备份脚本

参考脚本,需要根据实际环境修改,如文件路径、备份目录等。

#!/bin/bash
script_dir="/root/Dropbox-Uploader/" #这是 dropbox_uploader.sh 所在目录
dropbox_dir="/" #Dropbox 存放备份文件目录
mysql_server="localhost" #数据库服务器地址,一般填 localhost 即可
mysql_user="数据库帐号" #数据库帐号
mysql_pass="数据库密码" #数据库密码
backup_dst="/home/backup" #本地备份文件存放目录,手动创建

if [ $(date +%w) -eq 0 ];then #周日备份整站数据
backup_src="/data/www/cyhour.com /usr/local/apache/conf /usr/local/php/etc" #VPS上要备份的文件/目录,不同目录用空格分开
else #每天备份重要文件、数据
find /data/www/cyhour.com -maxdepth 1 -type f -exec tar cvf $backup_dst/important_files.tar.gz {} + #网站根目录文件
backup_src="/data/www/cyhour.com/wp-content/themes /usr/local/apache/conf /usr/local/php/etc" #VPS上要备份的文件/目录,不同目录用空格分开
fi

#压缩好的备份文件
dstfile="$backup_dst/$(date +"%Y-%m-%d").tar.xz"

#定义 Dropbox 旧数据的名字(30天前)
dropbox_old_file=$(date -d -30day +%Y-%m-%d).tar.xz

cd $backup_dst

#导出SQL数据库,并且按数据库分个压缩
for db in `mysql -u $mysql_user -h $mysql_server -p$mysql_pass -B -N -e 'SHOW DATABASES' | xargs`; do
(mysqldump -u $mysql_user -h $mysql_server -p$mysql_pass --skip-lock-tables ${db} | gzip -9 - > ${db}.sql.gz)
done

#压缩数据库文件合并为一个压缩文件,并删除单独数据库文件
tar zcf sql_all_$(date +%Y-%m-%d).tar.gz *.sql.gz
rm -rf *.sql.gz

#数据库、文件压缩到一起
tar cfzP "$dstfile" $backup_src $backup_dst/*.*.gz

# 将文件上传到 Dropbox
$script_dir/dropbox_uploader.sh upload "$dstfile" "$dropbox_dir/$(date +"%Y-%m-%d").tar.xz"

# 删除 VPS 本地临时文件
rm -rf $backup_dst/*.*

#开始删除远程30天前的文件
$script_dir/dropbox_uploader.sh delete $dropbox_old_file

脚本修改完,上传至 /root/ 目录下,并赋予执行权限。

chmod +x /root/backup.sh

注意:如果上面脚本 tar 打包 --exclude 无法排除指定目录,请将需要打包的目录放至排除参数后。

如:test 目录下有 1 2 3 4 5 这5个目录;1 下有 6 7 两个目录。现在要将 3 4 5 6 目录 tar 打包,2和1下的6这两个目录不要。

命令:tar -zcvf test.tar.gz --exclude=1/6 --exclude=2 test

crontab 定时执行脚本

44 4 * * * /root/backup.sh

每天 4:44 自动执行脚本

注意:最好运行 service crond status (Debian:/etc/init.d/cron status)检查 crond 服务是否启动,service crond start 可手动启动,或者设置开机启动:chkconfig --level 35 crond on

参考文章

KeenWon - 自动定时备份 VPS

TENNFY WU - 定时备份 VPS 数据至 Dropbox 教程

Unix & Linux Stack Exchange- tar files only, no directories


Centos 7 x86_64 bbr + LAMP 一键安装包环境下实测通过。


Originally Posted on Steemit & Blog by @zhijun.

声明:除非注明,常阳时光文章均为原创
本文地址:https://cyhour.com/549/
转载时必须以链接形式注明原始出处。
Views: 757 Tags:  ,  , 

Comments:6

  1. 难道刚才在备份,所以卡住了?!
    说起来我好久没备份过自己的博客数据了。

    2017.09.19 16:08 # 回复
    1楼
    • @不亦乐乎 刚才是什么时候?内存没爆,应该不至于卡住啊,可能是网络抽风。常备份是好习惯。

      2017.09.19 16:33 # 回复
  2. dropbox很耗系统资源的,不用换个备份吧,比如我用btsync。
    我现在的博客是bitcron,倒是自动备份到dropbox的

    2017.09.20 21:33 # 回复
    2楼
    • @Unee Wang 这个并没在 vps 安装 Dropbox 吧?只是用 api 把文件上传上去。btsync 也会占资源啊,bitcron 我也有一个,还是不大喜欢。

      2017.09.20 22:44 # 回复
  3. 老杨生活真闲适,到处折腾!

    2017.09.21 18:47 # 回复
    3楼

发表留言

炒蛋:Vultr 送$25 | 搬瓦工年付$19补货,优惠码 BWH26FXH3HIQ | 推荐VPS信息