记得以前在用OpenShift的时候,看过freehao123发布的一篇OpenShift免费空间全自动定时备份网站数据和MysqL数据到Dropbox ,那时靠着这个和能在恶劣的免费主机环境下生存的emlog,勉强支撑起博客。现在由于各种需要购入了廉价的VPS,就顺便重新搭起了博客,而这个需求自然是被延续了。之前的脚本就是由用于VPS的改过来的,随便谷歌一下,找出两篇文章,整理一下,下次可能还会用到。

参考资料:

自动备份网站并同步到 Dropbox

定时自动备份网站和数据库的脚本


1.运行Dropbox-Uploader脚本连接Dropbox获的授权

wget https://raw.github.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh

chmod +x dropbox_uploader.sh

./dropbox_uploader.sh

运行后会提示进入https://www.dropbox.com/developers/apps 创建App,获得App key和App secrect,以及创建时Permission type,依次填写,复制给出的链接到浏览器打开,同意授权,App授权步骤就此完成。

2.创建同步脚本

视具体情况修改

#!/bin/bash

# 一些配置

DROPBOX_DIR=/backup/$(date +%Y-%m-%d) # Dropbox目录

MYSQL_USER="root"

MYSQL_PASS="pswd"

MYSQL_DB=('typecho')

BACK_DATA=/root/backup-data # 备份文件保存在VPS的目录,需事先创建

DATA=/home/wwwroot/anohana.org # 需要备份网站的路径

 

# 定义备份文件名

DataBakName=Database_$(date +"%Y-%m-%d").tar.gz

WebBakName=Web_$(date +%Y-%m-%d).tar.gz

OldData=Database_$(date -d -6day +"%Y-%m-%d").tar.gz

OldWeb=Web_$(date -d -6day +"%Y-%m-%d").tar.gz

# Dropbox 里 30 天以上的旧数据可以清除

Old_DROPBOX_DIR=/$(date -d -30day +%Y-%m-%d) 

# 清理本地保存了 6 天的备份

echo -ne "Delete local data of 6 days old..."

rm -rf $BACK_DATA/$OldData $BACK_DATA/$OldWeb

echo -e "Done"

 

cd $BACK_DATA

# 导出 MySQL 数据库,并压缩

echo -ne "Dump mysql..."

for db in ${MYSQL_DB[@]}; do

    (/usr/bin/mysqldump -u$MYSQL_USER -p$MYSQL_PASS ${db} > ${db}.sql)

done

tar zcf $BACK_DATA/$DataBakName *.sql

rm -rf $BACK_DATA/*.sql

echo -e "Done"

 

# 备份网站文件

echo -ne "Backup web files..."

cd $DATA

tar zcf $BACK_DATA/$WebBakName *

echo -e "Done"

 

cd $BACK_DATA

# 开始上传到 Dropbox

echo -e "Start uploading..."

/root/dropbox_uploader.sh upload  $BACK_DATA/$DataBakName $DROPBOX_DIR/$DataBakName

/root/dropbox_uploader.sh upload  $BACK_DATA/$WebBakName $DROPBOX_DIR/$WebBakName

#/root 是之前的脚本具体存放位置

# 清理 Dropbox 里 30 天前的旧数据

/root/dropbox_uploader.sh delete $Old_DROPBOX_DIR/

 

echo -e "Thank you! All done."

3.设置crontab定时执行

我将第二个脚本命名为dropbox_sync.sh,可以先试运行一下如有错误便于排查。

chmod +x dropbox_sync.sh

crontab -e

此时会启动默认编辑器vim,添加以下内容

59 3 * * * /root/dropbox_cync.sh > /dev/null 2>&1

不会用vim,直接:wq保存退出,用WinSCP打开/var/spool/cron/crontab/root(文件名以当前用户名命名)修改,以上内容意义为:每一行由空格分割为6部分,依次为“分钟”、“小时”、“日”、“月”、“星期”、“要执行的程序”。故上面的设置是:每天3点59分执行dropbox_sync.sh脚本。

记得重启cron

/etc/init.d/cron restart

然后每天Dropbox的backup目录里会出现以日期命名的目录,里面有压缩的数据库和网站文件。