做虚拟主机服务商都有一个难以磨灭的烦恼,那就是万一硬盘坏了,或者客户网站被黑,该如何尽快恢复全部网站呢?相信大家都知道,唯一解决办法就是定期备份数据。由于我们运营虚拟主机的特殊性,客户的网站又多又大,要做到每天备份一次那是不可能,一般都是一周备份一次或者一月备份一次。
很多虚拟主机管理软件都自带有备份功能,笔者所用的两种管理软件:宏杰和星外都号称有自动备份功能,也能够每周备份出一些文件。不过仍然有不少缺点,比如宏杰备份的数据库是一个一个的,这在恢复的时候就不方便,最好是把整个数据库的data文件夹都备份下,然后恢复的时候直接解压到相同文件夹即可。而星外根本没有备份数据库的功能,需要手工备份。另外一个问题就是,随着近年来病毒文件和文件夹的增多,不少客户的网站里面有带点和com等系统禁止文件出现,导致无法删除,用winrar软件也无法压缩,所以在备份到这个空间的时候,就会停止备份。
鉴于以上不确定性因素,我们作为空间商,最好还是采用自己开发的一套备份方案。这样就算问题产生,也能很快对备份代码进行修正。下面是我利用批处理程序和Windows计划任务,对虚拟主机服务器中的网站和数据库进行备份的一套方案。
下面是备份客户网站文件所用的批处理程序。前面三行是获取当前日期,然后在备份盘F盘生成同名的目录,用来存放备份文件。客户的网站文件是放在d:\freehost下面的,然后我们用一个for语句循环,借助Winrar的命令行模式,来压缩这个目录下的全部文件夹。其中的几个参数要说明下:
a就是表明是压缩命令,-m1表明快速压缩,-r表明包括子文件夹,-ep1是对路径的调整,-inul是忽略Winrar压缩时出现的一些不能压缩的错误,-x是排除指定后缀的文件,如压缩包和日志等。
@echo off
set var=%date:~0,10%
mkdir F:\hostbackup\%var%
d:
cd d:\freehost
for /d %%i in (“*”) do “C:\Program Files\WinRAR\Winrar.exe” a -m1 -r -ep1 -inul -x*.zip -x*.rar -x*.log -x*.mp3 -x*.exe -x*.rmvb -x*.flv “F:\hostbackup\%var%\%%i.rar” “D:\freehost\%%i\”
下面是备份两种数据库(SQLServer和MySQL)所用的批处理程序。我们先把数据库服务暂停,然后压缩整个data目录,再启用服务。其中-ag”-MMDD”是在压缩文件名后面加上当前日期,以区别不同时候的备份。
@echo off
net stop MSSQLSERVER
“C:\Program Files\WinRAR\winrar.exe” a -ag”-MMDD” -m1 -r -ep1 -x*.bak “F:\hostbackup\sqlserver.rar” “D:\Program Files\Microsoft SQL Server\MSSQL\Data”
net start MSSQLSERVER
net stop mysql
“C:\Program Files\WinRAR\winrar.exe” a -ag”-MMDD” -m1 -r -ep1 -x*.sql “F:\hostbackup\mysql.rar” “D:\Program Files\MySQL\MySQL Server 5.0\data”
net start mysql
我们把这两个批处理bat文件制作好之后,然后添加到计划任务里面,设置成每周备份一次,最好是在深夜进行,这样网络比较空闲备份速度快,不影响客户网站正常访问。