一、需求

我每天都会进行一次备份,包括服务器上的数据库和网站文件。

目前是 仅本地备份 , 想着能够向远程主机备份一次。

二、实现

我有一台远程的主机,主机有ftp服务,主机在香港,平时基本不用,但是闲着也是闲着就利用起来。

原理

将本地备份完成的数据,通过ftp put 到远程主机

  • 需要在本地本分完成,我的本地备份是在1点,因此我在3点进行一次ftp put操作。

使用shell 连接和操作上传

#!/bin/bash
# 拿到需要上传的文件如 *_20170611_* 的文件列表
ls_file=*_`date +%Y%m%d`_*
ftp -n<<!
# 链接远程的ftp ip地址举例使用本地
open 127.0.0.1
# 使用用户名和密码
user username userpassword
# 使用二进制方式传输
binary
hash 
# 切换到本地的文件夹
# 我的文件都备份在/backup/文件夹下
lcd /backup
prompt
# 将上面拿到的文件列表进行上传
mput $ls_file
# 结束操作
close
bye
!

需要注意的地方

我在选择上传文件的时候,选择的是匹配 ls_file=*_`date +%Y%m%d`_* 规则的文件

因为我每天都会上传一次,因此如果单纯的上传 * ,之前已经上传过的还会请求上传,至于是覆盖还是拒绝,要看ftp服务的配置。

备份的时候肯定会涉及时间的,因此我只选择今天备份完成的列表上传到远程FTP服务器即可

将脚本加入 crontab

0 2 * * * cd /opt/;./ftpbackup.sh >> /data/ftpback.log 2>&1 &

三、 问题

因为我是香港的主机,所以速度很慢,在上传一个包含很多图片文件的备份时,花的时间特别长。

如果是国内的ftp服务器应该会好很多!

QQ截图20170611123305.jpg