编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

Linux使用lftp替换ftp命令备份网站到FTP服务器

wxchong 2024-10-17 17:03:36 开源技术 13 ℃ 0 评论

一、为什么使用lftp?

  1. 为什么不使用ftp命令?

    答:ftp命令不支持递归上传目录;

  2. 为什么不使用inotify+rsync实时同步?

    答:首先,备份服务器使用FTP服务端,此乃其一;其次,备份目的不同,网站较多为防止某些网站被入侵篡改时需要从备份恢复,因此不适宜用【实时备份】。

综合以上选择使用lftp解决ftp命令的问题,因此用其替换ftp命令。

二、如何使用?

lftp很强大功能很多,支持断点续传、多线程下载以及镜像功能等。此例场景如下:

  1. web服务器A:

    服务器IP:192.168.10.5

    需要备份网站目录/data/www,该目录下有多个站点;

  2. 备份服务器B:

    1. 备份目录/Web_Bak;

    2. IP:192.168.10.253

    3. 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级别;

最后总结】这里大概介绍了一下,看似很简单的一个东西,但是真正使用起来会遇到一个接一个的问题,只有遇到问题了才能总结到一些经验,下边说几点:

  1. 需要注意的:远程目录/Web_Bak/2016/20161026/192.168.10.5/,使用此命令的时候后边加【/】和不加【/】也是有区别的,使用表格说明如下:

  2. /Web_Bak/2016/20161026/192.168.10.5/】如果有多台服务器备份,使用此方式命名文件夹方便备份服务器端清理数据;

  3. 如果要执行上传命令后退出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

  4. 使用lftp备份粒度会较粗,如果要求较高还是建议做实时备份,关于备份其实要注意的问题也很多。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表