一、为什么使用lftp?
为什么不使用ftp命令?
答:ftp命令不支持递归上传目录;
为什么不使用inotify+rsync实时同步?
答:首先,备份服务器使用FTP服务端,此乃其一;其次,备份目的不同,网站较多为防止某些网站被改时需要从备份恢复,因此不适宜用【实时备份】。
综合以上选择使用lftp解决ftp命令的问题,因此用其替换ftp命令。
二、如何使用?
lftp很强大功能很多,支持断点续传、多线程下载以及镜像功能等。此例场景如下:
web服务器A:
服务器IP:192.168.10.5
需要备份网站目录/data/www,该目录下有多个站点;
备份服务器B:
备份目录/Web_Bak;
IP:192.168.10.253
FTP登录信息:bakuser、bakpassword
这里选择镜像功能,具体命令如下:
lftp -u bakuser,bakpassword -e "mirror -c -R --parallel=2 --exclude='bak' /data/www /Web_Bak/2016/20161026/192.168.10.5/ --verbose" 192.168.10.253
【命令及参数说明】
【-u】参数:指定FTP登录账号和密码;
【-e】参数:指定登录后执行的命令,双引号之间;命令执行完后不退出lftp;
【mirror】命令的参数说明:
【-c】参数:续传
【-R】参数:反向镜像,即将本地目录镜像到FTP服务器目录;
【--parallel】参数:并行即同时下载N个文件;
【--exclude】参数:忽略的文件名,使用正则表达式,例如这里【--exclude='bak'】就会忽略掉所有包含【bak】3个字符的目录、文件名。【文件:log.bak、yumbak123.php、index.php.bak;目录:bak、testbak】;这里容易造成误解,觉得是用来忽略掉目录的,这样就会误将文件名中包含bak的文件也忽略掉;
目录树如下图:
3个文件夹、4个文件,则只会上传【wwwroot目录和index.php文件,其他会忽略掉】;
【--verbose】参数:显示详细操作信息,可以使用--verbose = level选项或多个-v选项来选择详细程度级别,例如:
--verbose =3或者-vvv:一共4个级别:0、1、2、3 默认为0级别;
【最后总结】这里大概介绍了一下,看似很简单的一个东西,但是真正使用起来会遇到一个接一个的问题,只有遇到问题了才能总结到一些经验,下边说几点:
需要注意的:远程目录/Web_Bak/2016/20161026/192.168.10.5/,使用此命令的时候后边加【/】和不加【/】也是有区别的,使用表格说明如下:
【/Web_Bak/2016/20161026/192.168.10.5/】如果有多台服务器备份,使用此方式命名文件夹方便备份服务器端清理数据;
如果要执行上传命令后退出lftp可使用【-c】参数,命令如下:
lftp -c "mirror -c -R /data/www/ ftp://bakuser:bakpassword@192.168.20.253/2016/ --verbose=3"
【注意】使用【-c】参数如果要上传到FTP根目录IP后边的【/】不能省略,省略后会提示:
mirror: Not connected
使用lftp备份粒度会较粗,如果要求较高还是建议做实时备份,关于备份其实要注意的问题也很多。
本文永久更新地址://m.ajphoenix.com/linux/25523.html