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

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

Dropbox 准备

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

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

接着 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 账户信息。

创建备份脚本

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

#!/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/ 目录下,并赋予执行权限。

mkdir -p /home/backup
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 一键安装包环境下实测通过。

后记

执行脚本可能提示:which: no shasum in

比如:

which: no shasum in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)

CentOS 系统,SSH 安装一下 perl-Digest-SHA 就好:yum install -y perl-Digest-SHA

除非注明,沙唐桔文章均为原创,本文地址 https://cyhour.com/549/,转载时必须以链接形式注明原始出处。
声明:我们不销售主机,选主机需合法使用。任何主机需定期备份,防止数据丢失。信息以实际为准,评测仅供参考不代表权威!

WordPress 数据库常用 SQL 语句

WordPress 数据库存储了站点所有信息,数据库对站点来说至关重要,一般情况下不要折腾数据库。但是很多情况下,使用 SQL 语句批量修改站点内容,大大提高效率。下面 SQL 语句均收集自网络,操作需谨慎。所有的SQL语句都是假定你的数据库的前缀是"wp_" ,如果你使用不同的表前缀,请自行修改。 温馨…
浏览: 114 标签:  , 

CentOS 7.9.2009 PHP 7.1.12 升级到 PHP 8.0.1

前阵子在闲置 VPS 和垃圾站环境试过将 PHP 7.1.12 升级到 PHP 8.0.0,看起来没什么问题,只是 fileinfo 扩展没能折腾上。 昨天在 BuyVM 1核 512MB AMD CPU VPS 上又测试了一遍,参考网友方法,fileinfo 也开启成功了,忍不住把博客环境也升级一下,估计最多一个小时就能搞定。 然而实际花了4个…
浏览: 155 标签:  ,  , 

OneinStack php 7.4.12 升级 php 8.0.0

2020-11-26,PHP 8.0.0 正式版发布,WordPress 5.6 昨天出来了,开始支持 PHP 8,今天看到博友说 1G 内存也能跑 PHP7、PHP8 共存,忍不住在探针站试着升级了一下。 OneinStack 自带 php 升级脚本,不过并不支持跨版本升级,比如无法从 php 7.4.12 升级到 php 8.0.0,参考「OneinStack php 7.3.…
浏览: 89 标签:  ,  ,  ,  , 

rclone 挂载优化~

rclone 是一个命令行程序,支持 Windows、Linux、MacOS 等操作系统,可挂载多达 40 多种网盘网络存储,老杨一直在用它来备份 Google Photos 到 OneDrive,隔壁大佬 xiaoz 新写了篇文章介绍 rclone 的一些说明和注意事项(优化)。挺实用,就贴过来了。 安装 rclone rclone官网:https://rcl…
浏览: 75 标签:  ,  ,  , 
浏览: 153 标签:  ,  , 

Comments:8

  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楼
  4. 请问oneinstack的自动备份,也是使用这个API吗?谢谢

    2019.07.05 22:45 # 回复
    4楼

发表留言

Vultr 送$100,搬瓦工年付最低$49,优惠码 BWH3HYATVBJW,更多推荐VPS信息