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
参数,因为使用该参数会输出大量信息,显示过于繁琐。