每一个可以努力的日子,都是一份厚礼。
自动备份网站并同步到 Dropbox
之前写过一篇博客,记录了 定时自动备份网站和数据库 的脚本,不过只是将 VPS 上的数据打包保存在了本机的一个目录下,要知道真正的容灾备份需要至少在 3 个不同的物理节点上都有一份拷贝的。Email 发送备份文件在数据超多的情况下不太实际,而出于成本考虑我不想为了一个 VPS 又购买另一个来用作 FTP。不禁想到 DropBox,它无疑是很好的选择——基于 Amazon S3 的云存储保证了可靠性,免费的容量已经足够用,也不必担心数据被审查。
一、设置 Dropbox
Dropbox 提供了丰富的 API,使得我们不必使用官方庞大的客户端,而用一些简单轻量的脚本即可直接上传文件。
Dropbox-Uploader 就是这样一个第三方的脚本,并且它已经开源在了 Github。我们将此脚本下载到 VPS 中,即可使用。
$ wget https://raw.github.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh $ chmod +x dropbox_uploader.sh $ ./dropbox_uploader.sh |
运行脚本,根据提示设置自己的 Dropbox 应用 API,然后按照步骤设置,就可以使用其命令上传和下载文件了。
二、同步备份脚本
脚本根据自己的 VPS 配置进行一些修改。
#!/bin/bash # 一些配置 DROPBOX_DIR=/$(date +%Y-%m-%d) # Dropbox 目录,根目录 / 是你已经创建的 app 目录 MYSQL_USER="root" MYSQL_PASS="password" MYSQL_DB=('wordpress' 'project2') BACK_DATA=/root/backup-data # 备份文件保存在本地的目录 DATA=/var/www # 需要备份的网站文件 # 定义备份文件名 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..." ./dropbox_uploader.sh upload $BACK_DATA/$DataBakName $DROPBOX_DIR/$DataBakName ./dropbox_uploader.sh upload $BACK_DATA/$WebBakName $DROPBOX_DIR/$WebBakName # 清理 Dropbox 里 30 天前的旧数据 ./dropbox_uploader.sh delete $Old_DROPBOX_DIR/ echo -e "Thank you! All done." |
然后使用 crontab,让此脚本每几天定时自动运行,网站的所有数据就会安全地备份到 Dropbox 了。其他注意事项,可以参考我之前的一篇 定时自动备份网站和数据库。
– EOF –
这篇文章由lovelucy于2013-09-09 20:00发表在Linux。你可以订阅RSS 2.0 也可以发表评论或引用到你的网站。除特殊说明外文章均为本人原创,并遵从署名-非商业性使用-相同方式共享创作协议,转载或使用请注明作者和来源,尊重知识分享。 |
批评不自由
则赞美无意义
Mozilla Firefox 27.0 Windows 7 大约10年前
我是美国鳄鱼的虚拟主机,虽然不是VPS,但也开放了SSH,用putty可以上,用你这个办法也可以吧?
Google Chrome 33.0.1750.152 Linux 大约10年前
需要有设置 crond 定时任务的权限
Mozilla Firefox 25.0 Windows 7 大约11年前
虚拟主机的飘过。。。
Google Chrome 29.0.1547.66 Windows XP 大约11年前
非常实用~
Google Chrome 29.0.1547.66 Windows 7 大约11年前
我比较暴力……直接在vps上跑一个dropbox客户端。
Google Chrome 29.0.1547.66 Windows 7 大约11年前
Dropbox 客户端常驻内存,会定时和服务器同步。资源能省一点是一点……
Google Chrome 29.0.1547.66 Windows 7 大约11年前
128M 的 vps 表示跑 dropbox 的客户端直接爆内存… 还是这样定时备份好
Google Chrome 29.0.1547.66 Windows 7 大约11年前
有几个小疑问:
1. 既然所有的 .sql 最后都会被打包成一个 .tar.gz , 为什么还要把 sql 打成 .sql.gz ? 感觉有点冗余操作
2. $DomainName 没定义, 应该是你公布脚本的时候删漏了?
Google Chrome 29.0.1547.66 Windows 7 大约11年前
1. 的确是,已经修改
2. 这都被你发现了。。已修正
Google Chrome 29.0.1547.66 Windows 7 大约11年前
发现是因为我也在用…
另外, 删除若干天前的文件, 可以这么玩:
find “$BACK_DATA/” -mtime +7 -exec rm -f {} \;