前一阵主机服务提供商The Planet的机房起火爆炸,服务器3天之内不能访问,10几个站点down掉,差点搞死我。以前一直就说搞个网上自动备份的方案,但一直犯懒拖着,这次让我感到了迫切性。找了半天,终于找到个自认为性价比颇高的方案,和大家分享一下。
首先在DreamHost购买了一年$119.40的一个虚拟主机,在网上找了个折扣码,实际只花了$69.4。大家可以用我制作的折扣码 OLDMONK1IP, 也是便宜50美元,还免费赠送一个独立IP。有了独立IP就不用担心会被GFW封掉了。 这个虚拟主机有500G硬盘空间,每周这个限制上调2G。每个月的带宽限制是5TB,每周上调40G;无限的数据库,支持shell,php,python,subversion,免费送一个国际域名,还可以绑定无限的域名。
在原先的网站创建backupsite.sh
#!/bin/sh
#备份数据库
/usr/local/bin/mysqldump -u[用户名] -p[口令] -h[主机地址] -f [数据库名] > ~/bk/doyjdb.bak
gzip -9 ~/bk/doyjdb.bak
#备份网站
#先删除旧的备份文件
rm -f ~/bk/doyjsitebk.tar.gz
#打包www目录
tar -cf ~/bk/doyjsitebk.tar -C / usr/www/doyj
gzip -9 ~/bk/doyjsitebk.tar
然后执行下面的命令,使其可执行
chmod 755 backupsite.sh
再把这个backupsite.sh加入到doyj.com的cron job中,每天执行一次。
在dreamhost申请的虚拟主机中,创建downloadbk.sh
#!/bin/sh
#得到当前日期,为了给文件名加入日期戳
CURRENT_DATE=`date +%Y%m%d`
#算出一周前的日期,这是为了删除一周前的备份文件
REMOVE_DATE=`date +%Y%m%d -d " -7 day"`
#下载备份文件到backup目录
#下载数据库备份
wget –ftp-user=[口令] –ftp-password=[密码] ftp://www.doyj.com/bk/doyjdb.bak.gz -O ~/backup/doyjdb.$CURRENT_DATE.bak.gz
#下载www目录备份
wget –ftp-user=[口令] –ftp-password=[密码] ftp://www.doyj.com/bk/doyjsitebk.tar.gz -O ~/backup/doyjsite.$CURRENT_DATE.tar.gz
#删除一周前的备份文件,这样保证只保存最近一个星期的备份
rm -f ~/backup/doyjdb.$REMOVE_DATE.bak.gz
rm -f ~/backup/doyjsite.$REMOVE_DATE.tar.gz
然后执行下面的命令,使其可执行
chmod 755 downloadbk.sh
再把downloadbk.sh加入到dreamhost虚拟主机的cron job中,让它在backupsite.sh执行二小时后再运行。
这两天想把dreamhost的域名目录什么的都设置好,然后每天用script下载完备份数据后,在dreamhost自动把数据恢复了。 这样一旦原先的服务器有问题,就只要修改dns,把站点指到dreamhost这台机器上来即可。如果能在shell中加入一些判断,备份出现问题时能发email通知就更好了,可惜我对shell编程不熟悉,欢迎大牛们来指点一二。
如果主机有cpanel系统,那就更简单,cpanel支持远程ftp自动备份的。
这套备份方案算起来每个月是$5.79,比the planet提供的10G备份空间每个月$20, 80G每个月$160要便宜多了,而且两个服务器分属不同公司,在两个物理位置不同的机房内,两者同时出问题的可能性极小。
现在唯一担心的就是dns修改起作用的时间,按照域名注册商的说明是需要48小时,如何能缩短这个时间呢?