免安装客户端,利用DropBox备份VPS上的网站数据

微魔部落,新手教程正如大家所知,DropBox是国外十分流行的网盘,但是由于一些原因,我们常常不能正常使用。但好在使用https协议我们依然可以正常的访问。虽然上传和下载有些问题,但是用DropBox这个免费空间来备份网站数据无疑是灰常给力的事情。当然,如果你是Windows主机,并且有足够的内存来运行诸如Dropbox的客户端,自然不必说,云网盘的同步功能可以说是万无一失。可大内存的Win VPS不是我等能消费起的,更何况本文将介绍另一种更加给力的方法,仅利用我们熟悉的脚本,不需安装客户端,就可轻松使用DropBox备份网站数据,再结合Crontab,定时备份也就顺理成章的实现了!

虽然微魔的教程素来以“白”为特色,但还是稍微讲一下原理吧。本文中的脚本主要还是利用了DropBox本身的API,实现简单的登录并上传功能,虽然界面并不是可视化的,但是既然能工作,我们何乐而不为呢?

开始之前,先创建本地备份文件夹,以供后文使用,命令为mkdir -p /home/backup

1.在适当位置建立如下脚本(下载该脚本),命名为dropbox.sh(本文脚本位置放置在/root下)

脚本将MySQL中指定数据库导出为.sql文件,最后与网站文件一起打包成最终的tgz文件。

#!/bin/bash
DROPBOX_USER="DropBox账号"
DROPBOX_PASS="DropBox密码"
DROPBOX_DIR="DropBox目录,如/vmvps"
BACKUP_SRC="要备份的目录,如/home/wwwroot/vmvps.com"
BACKUP_DST="本地备份目录,如/home/backup"
MYSQL_USER="root"
MYSQL_PASS="MySQL密码"
MYSQL_SERVER="127.0.0.1"
MySQL_DATABASE="要备份的目标数据库,如vmvps"

NOW=$(date +"%Y.%m.%d")
DESTFILE="$BACKUP_DST/$NOW.tgz"

# Backup files.
echo "Packing databases..."
mysqldump -u $MYSQL_USER -h $MYSQL_SERVER -p$MYSQL_PASS $MySQL_DATABASE > "$NOW-Databases.sql"

echo "Packing files..."
tar czf "$DESTFILE" $BACKUP_SRC "$NOW-Databases.sql"
# Upload a file to Dropbox.
LOGIN_URL="https://www.dropbox.com/login"
HOME_URL="https://www.dropbox.com/home"
UPLOAD_URL="https://dl-web.dropbox.com/upload"
COOKIE_FILE="/tmp/du_cookie_$RANDOM"
RESPONSE_FILE="/tmp/du_resp_$RANDOM"

# Login
echo -ne " > Logging in..."
curl -s -i -c $COOKIE_FILE -o $RESPONSE_FILE --data "login_email=$DROPBOX_USER&login_password=$DROPBOX_PASS&t=$TOKEN" "$LOGIN_URL"
grep "location: /home" $RESPONSE_FILE > /dev/null
if [ $? -ne 0 ]; then
echo -e " Failed!"
rm -f "$COOKIE_FILE" "$RESPONSE_FILE"
exit 1
else
echo -e " OK"
fi

# Load home page
echo -ne " > Loading Home..."
curl -s -i -b "$COOKIE_FILE" -o "$RESPONSE_FILE" "$HOME_URL"
if [ $? -ne 0 ]; then
echo -e " Failed!"
rm -f "$COOKIE_FILE" "$RESPONSE_FILE"
exit 1
else
echo -e " OK"
fi

# Get token
TOKEN=$(cat "$RESPONSE_FILE" | tr -d '\n' | sed 's/.*<form action="https:\/\/dl-web.dropbox.com\/upload"[^>]*>\s*<input type="hidden" name="t" value="\([a-z 0-9]*\)".*/\1/')
# Upload file
echo -ne " > Uploading '$DESTFILE' to 'DROPBOX$DROPBOX_DIR/'..."
curl -s -i -b $COOKIE_FILE -o $RESPONSE_FILE -F "plain=yes" -F "dest=$DROPBOX_DIR" -F "t=$TOKEN" -F "file=@$DESTFILE" "$UPLOAD_URL"
grep "HTTP/1.1 302 FOUND" "$RESPONSE_FILE" > /dev/null

if [ $? -ne 0 ]; then
echo -e " Failed!"
rm -f "$COOKIE_FILE" "$RESPONSE_FILE"
exit 1
else
echo -e " OK"
rm -f "$COOKIE_FILE" "$RESPONSE_FILE"
fi

echo "Cleaning the backups..."
rm -f "$NOW-Databases.sql"
find $BACKUP_DST -mtime +3 -delete

本脚本仅备份指定的一个数据库,即变量$MySQL_DATABASE,如需备份全部数据库,可将脚本中的$MySQL_DATABASE,替换成–all-databases

2.赋予脚本运行权限

chmod +x dropbox.sh

3.测试脚本运行情况

/bin/bash dropbox.sh

4.如运行无误,设置定时任务

crontab -e

按照自己的需要输入,如需要每日备份可参考

00 00 * * * /bin/bash /root/dropbox.sh

根据微魔追踪,本文所用脚本,目前所知最早作者为一名老外(点击查看),后经国人部分转载与修改,微魔经过一些自己的修改形成本文,但由于测试时间有限,仅在自己的两个Debian 6系统的VPS进行测试。因此,难免有疏漏,敬请高手飘过不吝赐教!

猜你 喜欢

关于作者: 微魔

小微魔,大智慧!

多条评论

    1. 本脚本仅备份指定的一个数据库,即变量$MySQL_DATABASE,如需备份全部数据库,可将脚本中的$MySQL_DATABASE,替换成–all-databases。这样可以备份MySQL下所有的数据库为一个.sql文件,但是这样有个坏处,把没用的数据库也一起备份了。我昨天尝试了其他脚本的分别打包,但是在Debian下总是报错,就放弃了…等我有时间再研究一下吧~

    1. 有一个好用就行了呗。多个的话,如果都是简单的shell脚本的话,分开时段运行应该不会互相影响。不过也不推荐,这样意义不大吧

  1. 这应该不是使用API,这是抓包通过curl模拟用户登录上传的动作来自动化上传。先要确定环境是否支持curl,不止dropbox,115网盘等等都可以的。

      1. 其实网盘网赚中用VPS远程上传到网盘就是通过curl模拟登陆的,只是115不想国外的稳定,老是改版更新,数据格式上变来变去,很麻烦,我也曾经试过这样备份,可惜不久115又改了,又要抓包分析,反反复复,实用性不大。

  2. 这个,在老外的博客里找到过,测试过几次,都失败了。说是第9行还是第十行就出错,也不知道是怎么搞的

  3. 你好 请问现在dropbox 有文件上传大小限制吗 如果超出限制大小 是不是可以把数据通过分割(分卷压缩)方式上传呢 有实现的方法吗 ?

  4. [root@Ming ~]# /bin/bash dropbox.sh
    Packing databases…
    Packing files…
    tar: Removing leading `/’ from member names
    > Logging in… OK
    > Loading Home… OK
    > Uploading ‘/home/backup/2012.09.21.tgz’ to ‘DROPBOX/backup/’… Failed!

    测试每次都是失败 ,不知道为什么·

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注