数据备份无论怎么强调其重要性也不为过!
数据的备份不应仅停留在数据库的备份,针对于以静态内容为主的网站来说,其静态部分的内容备份和数据库的备份同样重要,一旦丢失同样无可挽回,特别是每天都会有静态内容产生的情况下。
手动操作过时了且容易遗忘,不利于时点的很好分割,做成自动执行任务了。
首先需要制作备份脚本,这涉及到全量备份还是增量备份的问题,如果全量备份内容很大就有必要实施增量备份了,但全量备份也是不可省的,只是备份的频率不需要每日都实施。
在脚本制作的过程中遇到了几个问题,在此总结一下以飨访客。
增量备份的核心是如何把增量的范围和对象圈定,在linux中有个find的命令,将档案系统内符合 expression 的档案列出来,其语法及部分常用参数含义见文末,我使用的参数主要type和mtime,脚本核心命令:
find /test/ -type f -mtime -1 -print > /test/bak/filelist`date -d "-1 day" +%F`.daily
该命令的意思是在test目录下把文件修改时间为距离脚本执行时间24小时之内的普通文件找出并打印到一个以日期命名的清单文件中
tar --exclude /test/cache -T /test/bak/filelist`date -d "-1 day" +%F`.daily -czPf /test/bak/daily/test`date -d "-1 day" +%F`.tar.gz
该命令的意思是将清单中列出的最近一天内修改过的文件进行压缩打包备份,但排除缓存文件。
scp -P 50001 /test/bak/daily/test`date -d "-1 day" +%F`.tar.gz root@x.x.x.x:/test/appbak/daily/
该命令的意思是将上面打包好的文件在另外一台机器上备份一份以确保万无一失
该脚本每天凌晨2点自动执行一次,会保存2份备份文件,同时另一个类似脚本每个月1号凌晨2点全量备份一次,从而达到文件安全的目的。
脚本编写的过程中遇到2个问题:
第一个就是脚本手动执行没有问题,但是通过自动任务执行的时候总是备份不完全,且备份文件很小,这意味着在执行的过程中产生了中断,该问题之前不止一次出现过,经过分析和试验,在做tar打包的时候试着去掉了-v参数解决了这一问题,原因不明,可能是-v的意思是在打包的时候把内容显示在客户的屏幕,而为了linux服务器的安全,我把ssh的断线时间设定为了30秒钟,也就是说如果服务器访问超过30秒未做任何操作则自动断开,而手动执行的过程中是不会断开的,故备份无问题,但是自动备份的时候若加-v有可能会导致自动中断,待确定
第二个问题是在脚本执行时每次都会出现tar绝对路径问题的错误信息,需要加-P参数来解决。
第三个问题scp跨服务器备份的时候需要手动输入密码,若不需要输入密码就可以直接备份,则需要建立白名单机制,在服务器和客户端直接建立公有密钥的共享,具体方法将另文分享。
find命令:
用法:find path -option [ -print ] [ -exec -ok command ] {} ;
使用说明:
expression 中可使用的选项有二三十个之多,在此只介绍最常用的部分。
-exec:对搜索的结构指令指定的shell命令。注意格式要正确:"-exec 命令 {} ;"。注意“{}” 与;之间有空格。
-mount,-xdev : 只检查和指定目录在同一个档案系统下的档案,避免列出其它档案系统中的档案
-amin -n : 在最近的 n 分钟内被读取过
-amin +n : 在 n 分钟之前被读取过
-anewer file : 比档案 file 更晚被读取过的档案
-atime -n : 在最近的 n 天内读取过的档案
-atime +n : 在 n 天前读取过的档案
-cmin -n : 在最近的 n 分钟内被修改过
-cmin +n : 在 n 分钟前被修改过
-cnewer file :比档案 file 更新的档案
-ctime -n : 在最近的 n 天内修改过的档案
-ctime +n : 在 n 天前修改过的档案
:-mtime n 按照文件的更改时间来找文件,n为整数。n表示文件更改时间距离为n天,-n表示文件更改时间距离在n天以内,+n表示文件更改时间距离在n天以前。
-empty : 空的档案-gid n or -group name : gid 是 n 或是 group 名称是 name
-ipath p,-path p : 路径名称符合 p 的档案,ipath 会忽略大小写
-name name,-iname name : 档案名称符合 name 的档案。iname 会忽略大小写
-type c : 档案类型是 c 的档案。
d: 目录
c: 字型装置档案
b: 区块装置档案
p: 具名贮列
f: 一般档案
l: 符号连结
s: socket
-pid n : process id 是 n 的档案
- 上一篇: JSP九大内置对象
- 下一篇: 跨服务器文件传输而无需输入密码实战
评论