问题场景:
为了将生产环境中的每日备份转移到备份服务器上。备份服务器和生产服务器通过互联网连接,位于多个不同的城市。备份服务器只负责保留一份拷贝,不起替代生产机的作用。
使用scp来备份,失败率很高,重传的代价较大。单个备份越大,越容易失败。故将备份文件使用http来传输,在生产机上开启http服务,将存放备份位置配置为可在Web上访问的静态文件,使用wget来下载。
wget -c -r -l 1 -N http://192.168.0.2/archive/
这里将真实IP替换掉了。此办法可以断点续传、检查更新;已经传完的文件,先检查更新时间,没有变化的不会再次传输。
问题:
在使用了wget之后,系统在1年多的时间内运行正常,之后无法下载新的备份。旧的备份没有在生产服务器上删除或是移走。这样一来,每次执行定时下载,在执行完前面300多个已经下载的文件的检查之后,wget终止。
解决方法:
将原wget命令改为
wget -r -l 1 -N http://192.168.0.2/archive/
即,去掉了-c选项,下载能够继续进行。
缺点:
失去了断点续传的功能。如果经过重试之后放弃,再次启动wget下载,将会重新下载,不会从断点继续。只有下载完成,长度和时间戳匹配的文件,才不会被再次重新下载。
即使如此,成功率、简便程度仍比用scp要高得多。