在linux系统中,进行增量备份,除了使用rsync外,对于小规模的备份,还可以考虑lftp、mirror结合的方法。
简单好用,值得一试。
1,安装lftp:
yum install lftp
这里使用yum安装,更简单。
2,备份网站是数据库(xxx建议数据库最好每天都全部备份,因为文件不大,速度也很快)
先进入网站目录:(xxx备份时候每次都被目录搞晕,所以每次都直接进入网站目录)
举例:
cd /home/admin/
备份数据库到网站根目录:
格式:
mysqldump -u数据库用户名 -p密码 --default-character-set=编码 数据库名 > 文件名.sql
举例:
lftp连接到备份空间:
格式:
lftp ftp账号:密码@服务器
(lftp很多登陆格式,这种方法适合xxx我这种懒人,存在文档里,每次复制进去不用每次都输入用户名和密码)
例如:lftp xxx:123456@ftp.
把刚才备份的数据库传送到备份空间根目录:
格式:
put /全目录/文件名.sql
例如:
3,开始备份增量文件,一天或者一段时间的更新的文件。
格式:
mirror -R 本地文件夹全目录 远程目录
xxx有个discuz论坛,是一天备份一次的,由于每天附件更新很大,我们只增量备份附件目录即可。
格式:
把本地7月21号的附件目录上传到备份服务器attachments/day_100721的目录里,如果没有此文件夹,创建此文件夹。
如果不知道哪个文件夹更新了,可以用
“--only-newer 和 --only-missing”这两个参数,他会自动检测哪个文件或者文件夹有更新,自动上传到备份空间。
格式:
mirror -R --only-newer --only-missing 网站目录 备份空间目录
比如xxx的很多目录都有更新了就不适合用刚才那个命令了,适合用“--only-newer 和 --only-missing”了。
要把的全部网站的最近更新(在上次更新的基础上)上传到备份空间目录backupfile里,则使用命令:
mirror -R --only-newer --only-missing /home/admin// backupfile
这样他就会自动对比变动的文件或者文件夹,把变动的全部传到备份空间。
4,备份完毕,退出
exit
有关rsync的用法,请参考文章:
有关rsync安装与配置的实例教程
inotify+rsync配置实例详解
rsync+inotify 文件同步配置实例
Rsync配置与升级相关内容介绍
有关rsync服务器端配置及客户端的使用
学习rsync服务端与客户端的配置
rsync文件同步配置一例
文件同步工具rsync配置
linux rsync同步设置指南
有关lftp命令的用法,请参考文章:
lftp自动备份文件和数据库上传FTP服务器的shell脚本
linux下lftp命令使用小结
lftp命令增量备份网站的方法分享
linux下lftp命令行上传或下载整个文件夹的方法
linux下lftp命令中mirror的用法详解
linux下lftp连接ftp服务器进行上传与下载的方法详解
在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相同
使用-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关闭文件大小比较,只上传/下载新的文件,即使文件大小存在差异,默认情况下旧的文件会被新的文件代替。
当用URL代替目录时,可以对两台服务器上的目录进行镜像操作。只要可以,会自动使用FXP在FTP服务器之间进行文件传输。
一些ftp服务器默认隐藏了.开头的文件(如.htaccess),只会在LIST命令使用-a选项时显示。在这种情况下,使用设置set ftp:list-options -a。
因为可以给 mirror 命令传入参数,控制同步的行为:
–reverse 上传到FTP上,也可以使用 -R
–delete: 如果远程目录下已经没有某个文件,而本地有,则删除这个文件。
–only-newer: 只下载新的文件。mirror的判定新文件是通过文件大小和修改时间来判定的,我们可以使用
–ignore-time,来屏蔽时间判定,这样mirror只通过大小来判断文件,同步速度加快。
–exculde: 不包含某个目录。
–verbose: 详细输出。
例如:
自动备份服务器work文件夹,到本地当前目录的 bak文件夹下,并且删除已经不存在的文件,并且只下载最新的文件,再给出详细的输出。
用 lftp 的 -e 选项,把命令直接接在 lftp 之后:
也可以用 at 选项指定备份的时间:
这样每天 1 点就会执行备份任务。
在centos中一般默认安装了lftp。
如果,你的系统没有的话,可以运行如下命令安装lftp:
yum install lftp
1,对于支持匿名连接的ftp服务器,可以这样连接:
lftp ftpsite
2,如果是需要密码的话,可以使用以下命令连接。
lftp -u username,password ftpsite
为了同步本地的一个文件夹到远程文件夹,lftp增加了mirror命令。不用设置其它的选项,你只需要指定本地目录和远程目录即可。
mirror -R 本地目录 远程目录
mirror命令提供了几个实用的选项来控制同步进程。例如使用--delete选项,mirror命令会删除远程备份服务器中存在的文件而本地服务器不存在的文件,当使用
--only-newer选项时lftp只上传新的文件。另一个选项是--exclude,它允许你指定不需要同步的文件夹。如果你想监视同步的进程,可以使用--verbose选项。
每次同步时都要先执行lftp,再执行mirror命令比较麻烦。
lftp软件支持把两条命令合成一条,只需要添加-e选项就可以告诉lftp执行连接服务器后接着运行指定命令。
lftp -u username,password -e "mirror -R --delete --only-newer --verbose 本地目录 远程目录" ftpsite
也可以把命令存在一个文件里面,然后添加-f选项引用即可。
lftp -f /home/user/ftpscript.txt
这个特点,真是漂亮至极啊。
lftp提供了一些智能的功能,at选项可以很方便地指定在什么时候运行程序。
指定lftp在零晨运行:
lftp at 00:00 -u username,password -e "mirror -R --delete --only-newer --verbose 本地目录 远程目录" ftpsite &
注意&符号,让命令在后台运行,此时可以退出终端登录也是可以的。
以上介绍的都是lftp进行本地目录和远程目录之间的同步。
如何将恢复本地服务器的数据丢失呢?
只需要删除-R选项,lftp就会下载远程的文件到本地。
例如:
lftp -u username,password -e "mirror --delete --only-newer --verbose 本地目录 远程目录" ftpsite
有关lftp命令的使用方法,就介绍这些吧。
更多内容,可以使用man lftp命令查看所有的lftp命令选项。
,祝大家学习愉快。