之前介绍了Debian vps上使用axel多线程下载百度网盘资源,对应的是想介绍下如何将VPS上的数据上传至百度网盘上。不过百度网盘现在貌似关闭了PCS的API接口申请,使用起来比较麻烦。退而求其次,这里介绍下如何定时备份VPS数据至Dropbox中。
客户端法备份数据
1、安装及配置dropbox linux客户端
在VPS上安装linux命令行版本的dropbox:
1 2 3 4 5 |
32-bit: cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86" | tar xzf - 64-bit: cd ~ && wget -O - "https://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf - |
下载完成之后,运行dropbox
1 |
~/.dropbox-dist/dropboxd |
第一次运行该命令,会提示访问URL,通过访问该URL就可以绑定VPS与dropbox账号。此时查看命令行,会提示绑定成功。
绑定之后,root目录下会自动创建名为Dropbox的文件夹,Dropbox会自动同步该文件夹内的文件。
2、使用dropbox linux客户端同步vps数据
我们一般备份网站数据及数据库数据,正常情况下网站WEB目录不在root文件夹下,我们可以通过软连接指向网站WEB目录,而数据库数据可以通过命令行导出,并通过软连接指向该文件。
为了方便区分目录,可以在Dropbox文件夹下新建backups文件夹,用于备份数据。
1)定时备份网站数据
将网站WEB目录连接到/Dropbox/backups文件夹下,假定/var/www/wordpress为网站web目录
1 2 |
cd ~/Dropbox/backups ln -s /var/www/wordpress |
2)定时备份数据库文件
新建一个定时备份数据库文件的脚本
1 |
vi ~/backup/mysqlbackup.sh |
脚本内容如下:
1 2 |
echo "start mysql back up "${date} >> /root/backup/backup.log mysqldump -uroot -p123456 wordpress >/root/backup/mysqlback.sql |
其中,root为数据库的用户名,123456为数据库密码,wordpress为数据库名。
添加可执行权限
1 |
chmod a+x ~/backup/mysqlbackup.sh |
将mysqlback.sql连接到/Dropbox/backups文件夹下
1 2 3 |
#!/bin/sh cd ~/Dropbox/backups ln -s ~/backup/mysqlback.sql |
定时执行备份脚本文件,输入
1 |
crontab -e
|
添加以下内容
1 |
* 3 * * * /root/backup/mysqlbackup.sh |
3)定时开闭dropbox linux客户端
dropbox一直开着会占用vps的内存资源,没有必要一直开着,可以利用脚本定时运行和关闭dropbox。
创建脚本 ~/backup/dropboxswitch.sh
1 |
vi ~/backup/dropboxswitch.sh |
内容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#!/bin/sh date=`date +%Y%m%d_%H:%M:%S` start() { echo "starting dropbox "${date} >> /root/backup/backup.log /root/dropbox/.dropbox-dist/dropbox & } stop() { echo "stoping dropbox "${date} >> /root/backup/backup.log pkill dropbox } case "$1" in start) start ;; stop) stop ;; restart) stop start ;; esac |
添加可执行权限
1 |
chmod a+x ~/backup/dropboxswitch.sh |
然后定时每天凌晨4点启动dropbox,6点关闭:
1 |
crontab -e
|
添加以下内容
1 2 |
* 4 * * * /root/backup/dropboxswitch.sh start * 6 * * * /root/backup/dropboxswitc.sh stop |
脚本法备份数据
1、创建Dropbox应用
首先,需要创建一个Dropbox应用,可以从该网址进行创建:https://www.dropbox.com/developers/apps/create。
在这里,应用类型选择Dropbox API App,数据存储类型选择Files and datastores,权限选择Yes(应用只需要访问它创建的文件)。然后命名创建。
2、下载并执行dropbox_uploader.sh
dropbox_uploader 是一个第三方Dropbox备份脚本,首先下载脚本:
1 2 |
wget --no-check-certificate https://raw.githubusercontent.com/tennfy/Dropbox-Uploader/master/dropbox_uploader.sh chmod a+x dropbox_uploader.sh |
执行该脚本,绑定APP:
1 |
./dropbox_uploader.sh
|
根据提示输入Dropbox应用中的App key和App secret,许可类型选择a,确认y,复制给出的权限验证链接到浏览器,确认后回到终端按任意键完成。
之后可以执行下面的命令测试上传,提示Done就是绑定成功了:
1 |
./dropbox_uploader.sh upload /etc/passwd /backup/passwd.old |
3、编写定时脚本
1 |
vi /root/backup.sh |
内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
#!/bin/bash MYSQL_USER="root" #mysql用户名 MYSQL_PASS="xxxxx" #mysql密码 MYSQL_DATABASENAME="xxxxx" #要备份的数据库名 WEB_DATA="/var/www/xxx" #要备份的网站数据 #你要修改的地方从这里结束 # 定义备份存放目录 DROPBOX_DIR=/$(date +%Y-%m-%d) # Dropbox上的备份目录 LOCAL_BAK_DIR=/root/backup # 本地备份文件存放目录 #定义备份文件名字 DBBakName=Data_$(date +"%Y%m%d").tar.gz WebBakName=Web_$(date +"%Y%m%d").tar.gz # 定义旧数据名称 Old_DROPBOX_DIR=/$(date -d -3day +%Y-%m-%d) OldDBBakName=Data_$(date -d -3day +"%Y%m%d").tar.gz OldWebBakName=Web_$(date -d -3day +"%Y%m%d").tar.gz #删除本地3天前的数据 rm -rf $LOCAL_BAK_DIR/$OldDBBakName $LOCAL_BAK_DIR/$OldWebBakName ./dropbox_uploader.sh delete $Old_DROPBOX_DIR/ #导出mysql数据库 mysqldump -u$MYSQL_USER -p$MYSQL_PASS $MYSQL_DATABASENAME > $LOCAL_BAK_DIR/wordpress.sql #压缩数据库 tar zcvf $LOCAL_BAK_DIR/$DBBakName $LOCAL_BAK_DIR/wordpress.sql rm -rf $LOCAL_BAK_DIR/wordpress.sql #压缩网站数据 tar zcvf $LOCAL_BAK_DIR/$WebBakName $WEB_DATA #开始上传 cd ~ ./dropbox_uploader.sh upload $LOCAL_BAK_DIR/$DBBakName $DROPBOX_DIR/$DBBakName ./dropbox_uploader.sh upload $LOCAL_BAK_DIR/$WebBakName $DROPBOX_DIR/$WebBakName echo -e "Backup Done!" |
其中,用户可以根据自己的需求改编需要备份的目录,以及保留旧数据的时长(我这里设置的是3天)
如果mysql是编译安装,需要指定mysql的路径。
增加执行权限:
1 |
chmod +x /root/backup.sh |
测试该备份脚本:
1 |
./backup.sh
|
4.设置定时任务
执行:
1 |
crontab –e |
添加以下内容:
1 |
30 3 * * * /root/backup.sh |
这样,就可以每天凌晨3:30自动备份到Dropbox了。
5.最后重启Crontab
1 |
service cron restart |
重启之后就设置完成了
如果你不知道服务器当前时间,可以使用下面的命令,查看当前时间:
1 |
date -R |
修改为当前时区
1 |
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime |
即修改服务器时区为上海。
参考文章:
如何将VPS上的网站数据定时自动备份到Dropbox
利用dropbox备份vps数据