不要说永远,永远是无法实现的诺言。无论你使用webhosting,VPS,还是Cloud,都无法保证数据的永远安全,因为涉及到的安全因素太多。对于技术宅来说,丢数据对心灵的伤害要比丢了女人要严重的多。后者满街都是,前者仅在回忆。
对于企业来讲,一般都有成熟的灾难解决方案。对于个人站长,想要不花钱就能省时省力的备份数据,也不是难事。所以今天的主角是dropbox。
dropbox是个很知性的产品,我爱了她好多年,她说她也爱我,不过最初2G的容量让我很不满足。还好有很多的机会能把她调教的如狼似虎,比如完成相应的任务,大概能将容量增加到8G,再加上不定期推出的新任务,现在已经近30G了,完全能胜任对网站的备份任务。
本篇介绍的是独服或VPS的备份,如果你是虚拟主机,又恰巧是wordpress,那么你可以使用wp-time-machine这款插件,也可以实现备份到dropbox。
我们的目的是,将网站文件及数据库定时同步到dropbox。环境是centos。
安装dropbox
进入shell,root,进入root根目录:cd ~ 然后执行以下命令下载和解压。
wget -O - "http://www.dropbox.com/download?plat=lnx.x86" | tarxzf -
绑定dropbox
命令:
~/.dropbox-dist/dropboxd &
执行后会不断的出现一个网址,复制这个网址在本地浏览器访问,输入dropbox的账号和密码,会提示绑定成功。然后回到shell,也会有绑定成功的提示。
设置同步目录
同步目录就相当于windows下的dropbox文件夹。centos下,同步目录名为Dropbox。不过我们的目的是同步网站的数据,所以要将要备份的网站的目录ln到同步目录。
假设服务器上的所有网站都在 /home/wwwroot下,wwwroot也就是我们要同步的目录。执行以下命令
[cc lang=”bash”] cd ~/Dropbox
ln -s /home/wwwroot [/cc]
此时Dropbox目录下就会生成一个名为wwwroot的文件链接。
运行dropbox进程
命令和绑定的命令是一样的:
~/.dropbox-dist/dropboxd &
设置定时同步
dropbox的进程占内存还真不小,而且我们的目的仅仅是备份,没有必要让它一直运行,所以:
先回到root根目录
cd ~
再杀掉dropbox进程
killall dropbox
然后写一个同步脚本,命名为backup.sh,放在root目录下
#!/bin/sh
start() {
echo starting dropbox
/root/.dropbox-dist/dropboxd &
}
stop() {
echo stoping dropbox
pkill dropbox
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
esac
为backup.sh添加权限
chmod +x backup.sh
下面要设定一个定时备份的任务,仅在指定的时间备份网站数据,一般设置一小时即可,具体时间取决于网站内容的大小和服务器的速度,如果服务器在国外,那么备份的速度是非常之快的,有多快?比李双枪还快。
crontab -e
执行上面的命令后会进入vi编辑器,按i进入编辑模式,拷贝下面的代码进去。
0 4 * * * sh /root/backup.sh restart
0 5 * * * sh /root/backup.sh stop
意思是,每天四点开始备份,五点停止备份。然后按ESC,再按两次大写的Z保存退出。
同步mysql数据库
在root目录下建立文件,backupmysql.sh,文件代码如下:
#!/bin/bash
DBName=修改为数据库名
DBUser=修改为数据库用户名
DBPasswd=修改为数据库密码
BackupPath=/root/Dropbox/dbak/
LogFile=/root/db.log
DBPath=/usr/local/mysql/var/ #备份的数据库目录
#BackupMethod=mysqldump
#BackupMethod=mysqlhotcopy
#BackupMethod=tar
NewFile="$BackupPath"db$(date +%y%m%d).tgz
DumpFile="$BackupPath"db$(date +%y%m%d)
OldFile="$BackupPath"db$(date +%y%m%d --date='5 days ago').tgz #自动删除5天前的备份
echo "-------------------------------------------" >> $LogFile
echo $(date +"%y-%m-%d %H:%M:%S") >> $LogFile
echo "--------------------------" >> $LogFile
#Delete Old File
if [ -f $OldFile ]
then
rm -f $OldFile >> $LogFile 2>&1
echo "[$OldFile]Delete Old File Success!" >> $LogFile
else
echo "[$OldFile]No Old Backup File!" >> $LogFile
fi
if [ -f $NewFile ]
then
echo "[$NewFile]The Backup File is exists,Can't Backup!" >> $LogFile
else
case $BackupMethod in
mysqldump)
if [ -z $DBPasswd ]
then
mysqldump -u $DBUser --opt $DBName > $DumpFile
else
mysqldump -u $DBUser -p$DBPasswd --opt $DBName > $DumpFile
fi
tar czvf $NewFile $DumpFile >> $LogFile 2>&1
echo "[$NewFile]Backup Success!" >> $LogFile
rm -rf $DumpFile
;;
mysqlhotcopy)
rm -rf $DumpFile
mkdir $DumpFile
if [ -z $DBPasswd ]
then
mysqlhotcopy -u $DBUser $DBName $DumpFile >> $LogFile 2>&1
else
mysqlhotcopy -u $DBUser -p $DBPasswd $DBName $DumpFile >>$LogFile 2>&1
fi
tar czvf $NewFile $DumpFile >> $LogFile 2>&1
echo "[$NewFile]Backup Success!" >> $LogFile
rm -rf $DumpFile
;;
*)
service mysql stop >/dev/null 2>&1
tar czvf $NewFile $DBPath$DBName >> $LogFile 2>&1
service mysql start >/dev/null 2>&1
echo "[$NewFile]Backup Success!" >> $LogFile
;;
esac
fi
echo "-------------------------------------------" >> $LogFile
然后参考上一个步骤给文件加上权限,并根据自己的口味设置定时任务。
至此,同步方案已经完美形成,不管主机商如何的家门不幸,你的数据都不会丢。
本文参考自:http://www.qwolf.com/?p=1223
WordPress Backup to Dropbox 这个插件,也管用~效果相同
这篇我收藏了,最近在搞vps 各种备份方案。
立即实验了,这种备份方式还是挺好的。
backup.sh第四行估计是写错吗 我换成了~/.dropbox-dist/dropboxd &
也许是我初学linux的关系吧 总之还是太感谢了
是写错了,被编辑器转义了,懒得改
这么好的文章能转走吗?
字符集输出插件不错,能分享下不?
你说代码高亮啊 codecolor ,很不错的,关键是没有js,不占资源。
学习了~~打算有空实践一下~~~~~
嗯 很爽的 不用整天提心吊胆担心idc挂掉 我曾经遇到过 数据全没
我不要看这个,我要看你写文章。
看把你猴急的,他人呢?
不知道在哪鬼混呢
我是说他好像就没回复过呀,我们的操作对么
肯定对,能看得见
仅擅长情书