由于买的是廉价的VPS,所以备份是十分重要的,不然辛辛苦苦写的东西,一下子就没有了,是十分痛心的。一说到备份,Dropbox是一个好的选择,这篇文章则讲了在VPS安装Dropbox Cli客户端来实现VPS的自动备份。但是Dropbox会占用一部分的内存,对于“惜内存如金”的小内存VPS,显然是不合适的。而且从文章来看配置也非常的麻烦。幸好有人写出了利用Dropbox API和CURL的脚本DropboxUploader,轻轻松松的解决了问题,基本不占什么内存。以下脚本就是参考了Dropbox Uploader的脚本,该脚本来自这儿,我稍微改动了一下,将数据库也一并打包入备份的包,使得本地也只有一个包,便于操作。
#!/bin/bash DROPBOX_USER="your_dropbox_user_name" DROPBOX_PASS="your_dropbox-password" DROPBOX_DIR="/backups" BACKUP_SRC="/srv/www/samnew.net /etc/nginx " BACKUP_DST="/root/backup" MYSQL_SERVER="127.0.0.1" MYSQL_USER="your_mysql_user_name" MYSQL_PASS="your_mysql_password" # # Stop editing here. NOW=$(date +"%Y.%m.%d") DESTFILE="$BACKUP_DST/$NOW.tgz" # # Upload a file to Dropbox. # $1 = Source file # $2 = Destination file. function dropboxUpload { # # Code based on DropBox Uploader 0.6 from http://www.andreafabrizi.it/?dropbox_uploader 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" UPLOAD_FILE=$1 DEST_FOLDER=$2 # 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 '$UPLOAD_FILE' to 'DROPBOX$DEST_FOLDER/'..." curl -s -i -b $COOKIE_FILE -o $RESPONSE_FILE -F "plain=yes" -F "dest=$DEST_FOLDER" -F "t=$TOKEN" -F "file=@$UPLOAD_FILE" "$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 } # Backup files. echo "Dumping databases..." DATABASE_BAK="$BACKUP_DST/$NOW-Databases.sql" mysqldump -u $MYSQL_USER -h $MYSQL_SERVER -p $MYSQL_PASS --all-databases > "$DATABASE_BAK" echo "Packing files..." tar czf "$DESTFILE" "$DATABASE_BAK" $BACKUP_SRC dropboxUpload "$DESTFILE" "$DROPBOX_DIR" echo "Cleaning the backups..." rm -f "$DATABASE_BAK" find $BACKUP_DST -mtime +7 -delete
将脚本用SCP传送到VPS,并且设定为cron任务,让其自动备份.用crontab -e来编辑,crontab -l来显示所建立的计划任务.如添加为每周日早上5点钟备份则为0 5 * * 0 /bin/bash /root/DropboxBackup.sh,该脚本已经运行2个月,基本正常。
可以改进之处:可以通过RSYNC来实现增量备份。
参考资料:
[1]: 在VPS中安装Dropbox实现网站的实时备份[转]
[2]: 利用Shell脚本实现自动备份VPS数据到Dropbox