原文来自:八五烧饼的博客
一直以来,使用美帝VPS建站,由于网速等多方面原因,面临着备份困难、下载困难的难题,而且还要面临故障啊、商家跑路啊等等数据丢失的风险,前段时间DS不是数据都木有了么。现在就来讲一下解决这个问题的方法,早些时候有用脚本通过FTP来备份的,例如使用godaddy域名附带的免费空间或者另外单独购买备份空间,但有时并不好用;也有两台VPS同步备份的,这个花费有点高。而现在使用DropBox来进行同步备份,全自动化,非常好用,去年就有过类似的介绍,但很多都不详细,搜集了网上的方法,特别整理出来,所有过程都有详细注明。
安装Dropbox Linux客户端:
SSH登陆,进入root目录,输入以下命令(注:下面的命令中已包含cd到root根目录的命令,而且只有在root根目录下后续步骤才能生效),视版本不同而选择:
32位CentOS:
cd ~ && wget -O - "http://www.dropbox.com/download?plat=lnx.x86" | tar xzf -
64位CentOS:
cd ~ && wget -O - "http://www.dropbox.com/download?plat=lnx.x86_64" | tar xzf -
下载后已自动解压,不需要再执行解压命令。
Dropbox与机器绑定:
~/.dropbox-dist/dropboxd &
第一次执行会生成“host_id”,这机器与Dropbox进行绑定的唯一字符串,提示的信息是一个链接,而且会重复滚动出现直到绑定完成。复制这个链接在浏览器里访问,输入Dropbox帐户和密码就可以了,输入后会自动跳转到Dropbox主界面并且会有绑定成功的提示,此时在ssh客户端里也会有提示并且停止滚动,再按回车键就完成绑定。
(注:官方的运行命令结尾没有“&”这个符号,在centos下运行会出现ssh冻结无反应的情况,据称Debian也会。实际上守护进程已经在运行了。)
建立目录软链接:
在root目录下生成的“Dropbox”文件夹(linux文件夹名称区分大小写的),就是Windows里叫做“同步目录”的文件夹,只要把文件放置在里面就会同步。在未同步之前,里面有一个文件夹“.dropbox.cache”和一个文件“.dropbox”。当然我们不可能把网站放置到这里,因此我们需要在里面建立软链接就行了,使用ln命令建立软链接(软链接其实就是windows里的快捷方式),格式是:ln –s 源文件 目标文件,我可以先进入“Dropbox”文件夹,免去每次都需要输入目标文件的麻烦。过程如下:
cd ~/Dropbox
ln -s /home/wwwroot
释义:进入“Dropbox”文件夹,建立/home/wwwroot/ 文件夹的软链接。运行这两个命令后会在“Dropbox”文件夹下生成一个名为“wwwroot”的软链接。如果网站放在不同地方的话,那么就建立多个软链接就好。
运行同步守护进程,同步网站数据:
输入以下命令(就是第二步绑定“host_id”的命令)
~/.dropbox-dist/dropboxd &
运行此命令后,视数据大小和网络环境而定,反正美国的VPS同步都很快,会在浏览器里的Dropbox文件管理界面里看到同步的文件夹。同时,在“Events(活动)”里看到同步记录,记录里有文件数量和文件夹数量,机器与Dropbox帐户的绑定日志也会记录在里面,这个其实就是Dropbox的帐户活动记录。
编写定时同步脚本,包括Dropbox运行、数据库备份、文件备份、删除旧备份四个脚本:
a)关闭Dropbox进程
killall dropbox
b)回到root目录下,创建“Dropbox运行”脚本backup.sh
编写定时同步脚本:
vi backup.sh
用vi编辑器新建backup.sh目录,运行后会进入vi编辑器,此时按“I”键进入编辑模式,复制以下代码粘贴进去,按ESC键退出编辑模式,开启大写锁定状态(按“Caps Lock”键),再按两次“Z”键即自动保存并退出vi编辑器。
#!/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
按“I”键进入编辑模式,复制以下代码并粘贴(文字部分填写需填写完好才行),按“ESC”退出编辑模式,开启大写锁定状态,再按两次“Z”键即自动保存并退出vi编辑器。
c)按以上方法继续创建“数据库备份”脚本bakmysql.sh
#!/bin/bash
DBName=修改为数据库名
DBUser=修改为数据库用户名
DBPasswd=修改为数据库密码
BackupPath=/root/Dropbox/
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
d)继续创建“文件备份”脚本bakfiles.sh
#!/bin/bash
tar -jcvpf /备份文件1路径/备份1文件名.tar.bz2 /被备份的目录1 && tar -jcvpf /备份文件2路径/备份2文件名.tar.bz2 /被备份的目录2
记得修改上面代码中的中文部分改为自己的参数。
e)继续创建“删除旧备份”脚本delbakfiles.sh
#!/bin/bash
find /root/Dropbox -name "files*.tar.bz2" -type f -mtime +1 -exec rm -f {} \;
f)赋予以上四个脚本可执行权限
chmod +x delbakfiles.sh
chmod +x bakmysql.sh
chmod +x bakfiles.sh
chmod +x backup.sh
编写定时执行指令:
crontab -e
“crontab”命令运行后会自动调用内置的vi编辑器进行编辑,按“I”键进入编辑模式,复制以下四行指令代码并粘贴
0 4 * * * sh /root/backup.sh restart
0 5 * * * sh /root/backup.sh stop
0 2 * * * sh /root/bakmysql.sh restart
0 3 * * * sh /root/bakmysql.sh stop
上面的意思是在(backup.sh)每天4点开始同步,5点关闭同步,(bakmysql.sh)每天2点开始同步,3点关闭同步,一个小时一般都够用,除非网站特别大。完成后按“ESC”退出编辑模式,开启大写锁定状态,再按两次“Z”键即自动保存并退出vi编辑器。附:“crontab -l” 列出目前的时程表,“crontab -r” 删除目前的时程表,查看系统当前时间的命令是“date”。
7、
卸载dropbox方法:
停止守护进程
killall dropbox
删除目录
rm -rf .dropbox .dropbox-dist Dropbox dropbox.tar.gz dbmakefakelib.py dbreadconfig.py
No Comments