一、lftp和mirror实现增量备份的方法详解
在linux系统中,进行增量备份,除了使用rsync外,对于小规模的备份,还可以考虑lftp、mirror结合的方法。简单好用,值得一试。
1,安装lftp:
yum install lftp
这里使用yum安装,更简单。
2,备份网站式数据库(建议数据库最好每天都全部备份,因为文件不大,速度也很快)
先进入网站根目录:(xxx备份时候每次都被目录搞晕,所以每次都直接进入网站目录)
然后备份数据库到网站根目录:
mysqldump -u数据库用户名 -p密码 --default-character-set=编码 数据库名 > 文件名.sql
lftp连接到备份空间:
lftp ftp账号:密码@服务器
最后把刚才备份的数据库传送到备份空间根目录:
put /网站根目录/文件名.sql
3,开始备份增量文件,一天或者一段时间的更新的文件
mirror -R 本地文件夹全目录 远程目录
1
如果不知道哪个文件夹更新了,可以用
“–only-newer 和 --only-missing”这两个参数,他会自动检测哪个文件或者文件夹有更新,自动上传到备份空间。
mirror -R --only-newer --only-missing 网站目录 备份空间目录
1
二、linux下lftp命令中mirror的用法详解
在linux系统中,lftp是个功能强大的文件传输工具,支持命令补全、历史记录、多任务后台执行,还有书签、排队、镜像、断点续传、多进程下载等功能。
lftp命令在操作上,类似于shell脚本,对shell了解的朋友,掌握这个命令会很快。
lftp支持ftp, ftps, http, https, hftp, fish, sftp, file等多种文件访问方式(https和ftps方式只有lftp编译集成了OpenSSL库时才可用)
可以在open url命令中指定访问方式,比如open http://www.us.kernel.org/pub/linux/.
hftp是ftp-over-http-proxy协议的缩写,即通过http代理的ftp访问,设置ftp:proxy为 http://proxy[:port]后会自动应用。fish是通过ssh连接到unix账户的协议。sftp是
内置了ssh2的访问协议。
lftp中的每项操作都是可靠的,非致命错误都会被忽略同时操作会被重新执行。
比如下载中断,它会重新从中断点开始继续下载;即便ftp服务器不支持断点续传,lftp会从头开始重新下载文件知道文件传输完成
lftp拥有类似shell的语法,支持并行在后台(&)运行命令,支持用()分组命令并将它们在后台执行。
所有后台任务在同一个进程中执 行。使用^Z(Ctrl+Z)将前台任务切换到后台执行,wait或fg(wait的别名)命令将后台任务切换到前台,使用jobs命令罗列正在执行的任 务。
一些命令(如cat, ls等)允许将输出重定向至文件或通过管道传送给别的命令。
命令能根据前一命令的结束状态有选择性地执行
如果在仍有任务未完成的情况下退出lftp, lftp将会把自己切换到nohup模式在后台继续运行,直至任务完成。
lftp内置了镜像功能(mirror命令)允许下载整个目录,反向镜像功能(mirror -R命令)允许上传整个目录到服务器上。镜像功能同样可用于同步两个远程服务器上的文件
夹。
at命令在当前环境下指定在特定的时刻执行某些任务;queue命令将指定的命令在当前服务器上按顺序执行;还有其他很多命令。
启动时,lftp先后执行配置文件:/etc/lftp.conf, ~/.lftprc, ~/.lftp/rc 。
可以在这些配置文件中增加alias或set命令。
希望看到完整协议调试内容的朋友可以通过debug命令来启动调试模式,如使用debug 3将看到所有的问候消息和错误消息
lftp拥有大量的配置项,可以通过set -a命令来查看所有的配置项和值,set -d命令查看配置项的默认值。配置项可以使用缩写并且省略前导符,只要名称唯一。
如果编译包括了OpenSSL (configure –with-openssl),那么lftp将内置有OpenSSL项目开发的软件功能。
mirror [OPTS] [source [target]]
将源文件夹镜像到目标文件夹。如果目标文件夹以/结尾,原文件夹名称会被附加到目标文件夹名称之后。源和目标都可以是指向文件夹的URL。
-c, –continue 续传上次的任务
-e, –delete 删除远程目录上不存在的文件
–delete-first 在传输新文件之前删除旧的文件
–depth-first 进入下一层目录优先于文件传输
-s, –allow-suid 根据远程站点设置suid/sgid比特位
–allow-chown 尝试将自己设置为文件所有者和所有组
–ascii 使用ascii方式传输(隐含了–ignore-size)
–ignore-time 决定是否下载时忽略时间因素
–ignore-size 决定是否下载时忽略文件大小因素
–only-missing 只下载缺少的文件(不管其他文件内容是否一样,有的文件皆不同步)
–only-existing 只下载已经存在于目标文件夹中的文件
-n, –only-newer 只下载新文件(-c参数无法工作)
–no-empty-dirs 不创建空文件夹(隐含了–depth-first)
-r, –no-recursion 不进入子文件夹
–no-symlinks 不创建符号链接
-p, –no-perms 不设置文件权限
–no-umask 不使用文件预设权限
-R, –reverse 反向镜像(上传文件)
-L, –dereference 将符号链接作为文件下载
-N, –newer-than=SPEC 只下载比指定时间晚的文件
–on-change=CMD 只要有文件或文件夹存在差异就执行命令CMD(所有文件都重新同步)
–older-than=SPEC 只下载比指定时间早的文件
–size-range=RANGE 只下载大小在指定区间上的文件
-P, –parallel[=N] 并行下载N个文件
–use-pget[-n=N] 使用pget传输每个文件
–loop 循环知道找不到差异
-i RX, –include RX 包括相匹配的文件
-x RX, –exclude RX 不包括相匹配的文件
-I GP, –include-glob GP 包括相匹配的文件
-X GP, –exclude-glob GP 不包括相匹配的文件
-v, –verbose[=level] 冗长操作
–log=FILE 将执行的lftp命令写入文件FILE
–script=FILE 将lftp命令写入文件FILE,但不执行
–just-print, –dry-run 与–script=-相同
–use-cache 使用缓存目录列表
–Remove-source-files 传输完成后删除源文件
-a 与–allow-chown –allow-suid –no-umask相同
同时mirror 命令支持正则来排除一些无需同步的文件夹及文件。 e.g:
mirror --exclude logs/ --exclude reports/ --exclude-glob .bak
1
使用-R时,第一个目录为本地目录,第二个目录为远程目录。如果第二个目录被忽略,将采用第一个目录的目录名。如果两个目录都被忽略,将采用当前的本地和远程目录。
如果目标目录以/结尾,那么源目录名将被加到目标目录上
RX是扩展的正则表达式,具体语法可参考egrep命令。
GP是通配符规则,比如.zip。
包含和不包含选项可以被多次使用。符合以下规则之一的文件将被镜像传输:(1)符合包含规则而不符合之后的不包含规则;(2)不符合任何规则,但第一条为不包含规则。目
录匹配时包括结尾的/。
注意:符号链接(软链接)不会被传输到远程服务器上,因为无法被FTP协议传输。要上传链接指向的文件,请使用mirror -RL命令(将符号链接视为普通文件)。
对于–newer-than选项,你可以使用文件或时间作为参数。时间参数的格式同at命令,如now-7days、week age等。如果指定为文件,将采用文件的修改时间。
冗长输出级别可以通过–verbose=level选项或者使用多个-v选项进行设定,比如-vvv。冗长输出级别为:
0 – 无输出(默认)
1 – 打印动作
2 – +打印不删除的文件名(当没有采用-e选项时)
3 – +打印
–only-newer关闭文件大小比较,只上传/下载新的文件,即使文件大小存在差异,默认情况下旧的文件会被新的文件代替。