Holmesian Blog

Linux/Unix自动备份网站的脚本

一、起因

在 Linux 和 Unix 系统中,使用 Apache 或者 Nginx 时,通常会将所有的虚拟主机网站存放在一个类似于 /www 的根文件夹下,并且一般是一个网站对应一个文件夹。通常情况下,如果使用 FTP 来备份网站,会遇到一些问题,因为网站的零碎文件很多,所以下载备份的速度会非常慢。而且,当从 Linux 或 Unix 服务器上通过 FTP 下载带有权限信息的文件到 Windows 或其他环境时,文件的权限会全部失效,在恢复网站时还需要重新设置权限,这给我们带来了不少麻烦。

一个更为明智的做法是将各个网站打包成一个文件,这样做不仅可以加快下载备份的速度,还能保存网站原有的结构和权限等信息。想一想,传输 1024 个 1KB 的文件和传输一个 1MB 的文件,哪个更快呢?

注意:这种备份方法同样适用于 MySQL 数据库的备份。

二、具体操作

假设我们要批量备份 /www 目录下的各个网站(各个文件夹),将 /bbs/webbak/ 作为备份的目标文件夹,我们可以在 /www 目录下执行以下命令:

ls -lh | grep / | awk '{print "#"split($9,myfname,"/")}{print "tar zcf /bbs/webbak/bak_"myfname[1]".gz "$9" &"}'

这个命令会输出批量打包的命令,我们需要检查这些命令是否存在明显错误(主要是担心会出现一些奇葩的目录名),然后将这些内容输出到一个 .sh 文件中,之后运行该文件即可。这样做的效果是将所有的网站(各个文件夹)分别备份成独立的 .gz 压缩包,并放置到指定的位置。

具体来说,在 /www 目录下运行以下命令:

ls -lh | grep / | awk '{print "#"split($9,myfname,"/")}{print "tar zcvf /bbs/webbak/20091128bak_"myfname[1]".gz "$9" &"}' > backup.sh

运行上述命令后,会生成 backup.sh 文件,其内容如下:

tar zcf /bbs/webbak/20091128bak_2_for_bak.gz 2_for_bak/ & 
tar zcf /bbs/webbak/20091128bak_888_for_bak.gz 888_for_bak/ & 
tar zcf /bbs/webbak/20091128bak_apache22@.gz apache22@ & 
tar zcf /bbs/webbak/20091128bak_bak.gz bak/ & 
tar zcf /bbs/webbak/20091128bak_bbs.gz bbs/ & 
tar zcf /bbs/webbak/20091128bak_blog.gz blog/ & 
tar zcf /bbs/webbak/20091128bak_bloglai.gz bloglai/ & 
tar zcf /bbs/webbak/20091128bak_chenbo.gz chenbo/ & 
tar zcf /bbs/webbak/20091128bak_ems.gz ems/ & 
tar zcf /bbs/webbak/20091128bak_myxgc200712.gz myxgc2007112/ & 
tar zcf /bbs/webbak/20091128bak_mzy.gz mzy/ & 
tar zcf /bbs/webbak/20091128bak_nc2.gz nc2/ & 
tar zcf /bbs/webbak/20091128bak_renshi.gz renshi/ & 
tar zcf /bbs/webbak/20091128bak_student.gz student/ & 
tar zcf /bbs/webbak/20091128bak_ucenter.gz ucenter/ & 
tar zcf /bbs/webbak/20091128bak_uchome.gz uchome/ & 
tar zcf /bbs/webbak/20091128bak_wangjian_blog.gz wangjian_blog/ & 
tar zcf /bbs/webbak/20091128bak_www.gz www/ & 
tar zcf /bbs/webbak/20091128bak_xiaoyouhui.gz xiaoyouhui/ & 
tar zcf /bbs/webbak/20091128bak_ycblog.gz ycblog/ & 
tar zcf /bbs/webbak/20091128bak_yihao.gz yihao/ & 
tar zcf /bbs/webbak/20091128bak_zhaolei@.gz zhaolei@ & 
tar zcf /bbs/webbak/20091128bak_zhouyu.gz zhouyu/ & 

最后,执行 backup.sh 文件即可完成备份操作。需要注意的是,tar 的参数可以根据自己的需求修改,不过最好不要带 v 参数,因为使用该参数会输出大量信息,显示过于繁琐。

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »