2006年8月24日星期四

服务器虚拟主机自动备份功能

  自己写了个脚本,来实现对我服务器上PHP+MySQL虚拟主机的自动备份。虽然目前只有我一个人在使用,但是即使这样,我也不希望数据因为意外事故损坏掉。
  备份的原理,就是把Apache和MySQL先停掉,然后用tar打包HTML目录和MySQL的数据库目录,恢复MySQL和Apache服务之后,再慢慢通过FTP客户端传到我的一台远程FTP服务器上(其实是我在网上买的一个虚拟主机空间)。
  备份周期完全由自己决定,我目前把它丢在/etc/cron.weekly下面让它每周运行一次。备份的文件会以备份日期自动命名。以后等我有了比较大的FTP空间之后,我就设置为按日备份。再在自己工作站上做一个按周归档,那就万无一失了。
  脚本文件如下(隐去部分敏感信息):

#!/bin/sh
HOME=/root
# Stop the services
/etc/init.d/httpd stop
/etc/init.d/mysqld stop
# Tar the html bag
cd /var/www
tar -czf /tmp/html.tar.gz html
# Tar the mysql/data bag
cd /usr/local/mysql
tar -czf /tmp/mysql_data.tar.gz data
# Start the services
/etc/init.d/mysqld start
/etc/init.d/httpd start
# Build the ftp script
DATESTRING=$(date +%Y%m%d)
echo "open www.XXX.com" > /tmp/ftp_$DATESTRING.txt
echo "put /tmp/html.tar.gz /wwwroot/vhostdatabackup/html_$DATESTRING.tar.gz" >> /tmp/ftp_$DATESTRING.txt
echo "put /tmp/mysql_data.tar.gz /wwwroot/vhostdatabackup/mysql_data_$DATESTRING.tar.gz" >> /tmp/ftp_$DATESTRING.txt
echo "exit" >> /tmp/ftp_$DATESTRING.txt
# Connect the backup FTP site and upload these files
ftp < /tmp/ftp_$DATESTRING.txt
# Clean temp files
rm -f /tmp/ftp_$DATESTRING.txt
rm -f /tmp/html.tar.gz
rm -f /tmp/mysql_data.tar.gz

增补于2006-09-10
  如果想在cron中运行,在脚本中FTP登录之前还要加上HOME=/root,否则无法实现自动登录。原因……是crond运行脚本时的环境变量太过“干净”了。

没有评论:

发表评论