当前位置:   article > 正文

基于FTP搭建数据异地备份_ftp异地备份

ftp异地备份

FTP介绍

文件传输协议(File Transfer Protocol,FTP)是一种提供网络之间共享文件的协议,它可以在计算机之间可靠、高效地传送文件。在传输时,传输双方的操作系统、磁盘文件系统类型可以不同。

FTP 协议允许 TCP/IP 网络上的两台计算机之间进行文件传输。而 FTP 服务是基于 FTP 协议的文件传输服务。

工作时,一台计算机上运行 FTP 客户端应用程序,另一台计算机上需要运行 FTP 服务器端程序。只有拥有了 FTP 服务,客户端才能进行文件传输。下面介绍FTP服务的构成和文件传输模式。

FTP 服务构成

上述的文件传输,指的是客户端和FTP服务器端之间的文件传输,如文件上传和下载。要实现文件传输还需要满足两个条件,如下:

  1. 服务器端必须开启一个 TCP 端口(默认为 21 端口),用来监听来自客户端的请求。
  2. 客户端连接 FTP 服务器端,需要使用 TCP 方式。这样可以保证客户端和服务器之间的会话是可靠的。

客户端与FTP服务器端之间传输一个文件是一次完整的 FTP 会话。该会话包含有两个连接,分别为控制连接和数据连接。其作用如下:

  • 控制连接:客户端向 FTP 服务器的 21 端口发送连接,服务器接受连接,建立一条命令通道。FTP 的命令和应答就是通过控制连接来传输的,这个连接会存在于整个 FTP 会话过程中。该连接主要负责将命令从客户端传给服务器,并将服务器的应答返回给客户端。所以,该连接不用于发送数据,只用于传输命令。
  • 数据连接:每当一个文件在客户端与服务器之间进行传输时,就会创建数据连接。该连接主要用来进行文件传输。

数据格式

在使用 FTP 进行文件传输时,针对不同的文件类型,FTP 提供了两种文件传输模式,分别为 ASCII 和二进制。这两种模式支持的文件如下:

  • ASCII:用于传输简单的文本文件,为默认类型。
  • 二进制:用于传输程序文件、字处理文档、可执行文件或图片。

FTP服务端安装

1、FTP的安装

#安装
yum install -y vsftpd

#设置开机启动
systemctl enable vsftpd.service

#启动
systemctl start vsftpd.service

#停止
systemctl stop vsftpd.service

#查看状态
systemctl status vsftpd.service

2、配置FTP 

#打开配置文件
vim /etc/vsftpd/vsftpd.conf

#显示行号
:set number

#修改配置 12 行
anonymous_enable=NO

#修改配置 33 行
anon_mkdir_write_enable=YES

#修改配置48行
chown_uploads=YES

#修改配置72行
async_abor_enable=YES

#修改配置83行
ascii_upload_enable=YES

#修改配置84行
ascii_download_enable=YES

#修改配置87行
ftpd_banner=Welcome to blah FTP service.

#修改配置101行
chroot_local_user=YES

#添加下列内容到vsftpd.conf末尾
use_localtime=YES
listen_port=21
idle_session_timeout=2400
guest_enable=YES
guest_username=vsftpd
user_config_dir=/etc/vsftpd/vconf
data_connection_timeout=1200
virtual_use_local_privs=YES
pasv_min_port=40000
pasv_max_port=40010
accept_timeout=6000
connect_timeout=6000
pasv_enable=YES
allow_writeable_chroot=YES

3、建立用户文件

#创建编辑用户文件
vim /etc/vsftpd/virtusers
#第一行为用户名,第二行为密码。不能使用root作为用户名 

szptftp
szptftp2019

4、生成用户数据文件

db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db

#设定PAM验证文件,并指定对虚拟用户数据库文件进行读取

chmod 600 /etc/vsftpd/virtusers.db 

5、修改 /etc/pam.d/vsftpd 文件

# 修改前先备份 

cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak

vi /etc/pam.d/vsftpd
#先将配置文件中原有的 auth 及 account 的所有配置行均注释掉
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers 
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers 

# 如果系统为32位,上面改为lib

6、新建系统用户

#用户登录终端设为/bin/false(即:使之不能登录系统)
groupadd ftp              #ftp传输属组
useradd szptftp -d /home/szptftp -g ftp -G ftp -s /bin/nologin
passwd szptftp                  # 默认为 szptftp2019

7、建立虚拟用户个人配置文件

mkdir /etc/vsftpd/vconf
cd /etc/vsftpd/vconf

#这里建立虚拟用户zxftp配置文件
touch szptftp

#编辑szptftp用户配置文件,内容如下,其他用户类似
vi szptftp

local_root=/home/dump/
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

#建立szptftp用户根目录
mkdir -p /home/dump
chown szptftp:ftp /home/dump  -- 不用考虑递归
chmod 777 /home/dump


8、防火墙设置

IPtables 的设置方式:
### vi /etc/sysconfig/iptables
### #编辑iptables文件,添加如下内容,开启21端口
### -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
### -A INPUT -m state --state NEW -m tcp -p tcp --dport 40000:40010 -j ACCEPT
# 防火墙放开端口
iptables -I INPUT -p tcp --dport 21 -j ACCEPT;    -- 启动ftp客户端/服务端使用端口号 21
iptables -I INPUT -p tcp --dport 40000:40010 -j ACCEPT;  -- 启动ftp服务端使用端口号 40000:40010


或者直接关闭防火墙
systemctl stop firewalld

9、重启vsftpd服务器

systemctl restart vsftpd.service

10、使用ftp工具连接测试

这个时候,使用ftp的工具连接时,我们发现是可以连接的。传输文件的时候,会发现文件上传和下载都会出现
500、503 、200等问题。这个时候,可以进行以下操作:
方式一、关闭SELINUX
#打开SELINUX配置文件
vim /etc/selinux/config


#修改配置参数
#注释  
SELINUX=enforcing

#增加  
SELINUX=disabled

#修改完成后,需要重启!

方式二、修改SELINUX
setenforce 0 #暂时让SELinux进入Permissive模式


#列出与ftp相关的设置
getsebool -a|grep ftp


#以下是显示出来的权限,off是关闭权限,on是打开权限。不同的机器显示的可能不一样。我看了我的显示的,和网上其他教程就不太一样
ftp_home_dir --> off
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
sftpd_anon_write --> off
sftpd_enable_homedirs --> off
sftpd_full_access --> off
sftpd_write_ssh_home --> off
tftp_anon_write --> off
tftp_home_dir --> off


#将包含有 ftp_home_dir 和 ftpd_full_access 相关的都设置为 1

setsebool -P ftp_home_dir 1
setsebool -P tftp_home_dir 1
setsebool -P allow_ftpd_anon_write 1
setsebool -P tftp_anon_write 1
setsebool -P ftpd_full_access 1

setenforce 1 #进入Enforcing模式

方式三、 SELINUX不对vsftp不做任何限制
setsebool -P ftpd_connect_all_unreserved 1

如果还是有问题尝试给我们用户的ftp目录,设置一下操作权限
chmod -R 775 /home/dump/

windows定时任务配置

如果为Windows 2008等服务器,默认配置系统,在下边“菜单栏”中,“开始”菜单右边第一 个,可以直接打开,如下图:

如果配置操作系统中,没有该选项,可以在“开始”菜单->“控制面板”->“管理工具”中打 开

”器理管器务服“开打 .1 程流务任理处批据数发下时定置配

路径:【服务器管理器】->【配置】->【任务计划程序】->【任务计划程序库】

务任时定置配 .2

A、右键【任务计划程序库】->“创建基本任务” 在弹出窗口中,填写基本基本信息,点击“下一步”按钮

:作操

B、定义定时任务的执行频率/周期,此处我们选择“每天”,点击“下一步”按钮

此处设置的执行时间,需要确保为平台已经完成当天数据抽取后的任意时间,考虑到白天可能 存在业务繁忙时段,会影响其他业务,建议设置时间为晚上21点以后

C、选择定时执行任务执行的操作内容,此处我们是下发数据,执行的为bat(批处理)程序, 所以选择“启动程序(T)”,点击“下一步”按钮

选择要执行的程序或脚本,点击“浏览”,进入我们存放脚本的路径,选中要执行的脚本

D、配置完成后,此步骤仅需要点击“完成(F)”按钮即可完成配置。此时,在“任务计划程序 库”中,可以看到刚已经配置的定时任务。可以在下边信息框中,查看该配置计划的详细信息

windows文件传输脚本 

创建一个文本文件内容如下:
open FTP服务器IP
user //用户名
password //密码
binary(ascii)* 注 文本文件用axcii二进制文件用binary cd 后面跟目录名 进入要备份文件所在的目录

get 文件名 要下载的文件
bye
保存后改名为ftp.ftp 新建BAT文件内容如下:
ftp -s:ftp.ftp 将ftp.ftp和该BAT文件存放在同一目录下 创建计划任务定时执行该BAT文件

参考脚本ftp.bat文件

  1. @echo off&setlocal enabledelayedexpansion
  2. ::------------------------------------------------------------------
  3. :: 功能描述: FTP从阿里云生产服务器上,将数据库备份文件同步到本地windows服务器
  4. ::-------------------------------------------------------------------
  5. title xx系统备份本地存档
  6. MODE con: COLS=80 lines=30
  7. color 0a
  8. rem ===配置FTP服务器地址,用户名,密码====
  9. set FTP_SERVER=120.24.xx.xx
  10. set FTP_USER=xxftp
  11. set FTP_PASSWORD=xxftp2019
  12. rem 备份本地存档延迟天数,比如:0表示取当天备份文件
  13. set ds=0
  14. set dy=%date:~,4%
  15. set dm=%date:~5,2%
  16. set dd=%date:~8,2%
  17. echo  当前日期为:%dy%年%dm%月%dd%日
  18. rem 补全月份,日期为两位数
  19. if %dm:~,1%==0 set "dm=!dm:~1!"
  20. if %dd:~,1%==0 set "dd=!dd:~1!"
  21. rem 判断是否为闰月,闰月则2月取29
  22. set /a "feb=^!(%dy%%%4)+28"
  23. if "%dy:~2,2%" equ "00" set/a "feb=!feb!-1+^!(%dy:~,2%%%4)"
  24. rem 取当前日期往前延迟天数的日期
  25. set/a "dd-=%ds%"
  26. rem 如果延迟天数后的日期为正数,则直接取日期值,否则,往前月份取实际日期
  27. if %dd% gtr 0 goto ok
  28. rem 日期值为负数,则循环往前扣减一天
  29. :tyt
  30. set n=0
  31. set/a dm-=1
  32. if !dm! equ 0 set/a "dy=%dy%-1,dm=0+12" 
  33. for %%a in (31 %feb% 31 30 31 30 31 31 30 31 30 31) do (
  34.     set/a n+=1
  35.     if !n! equ %dm% set/a "dd=!dd!+%%a")
  36. if %dd% leq 0 goto tyt
  37. rem 延迟天数后的日期,比如:20190101
  38. :ok
  39. rem 获取8位长度的日期值
  40. set/a "ymd=%dy%*10000+%dm%*100+%dd%"
  41. echo  前%ds%天的日期是%ymd:~,4%年%ymd:~4,2%月%ymd:~6,2%日
  42. set t_yyyy=%ymd:~,4%
  43. set t_mm=%ymd:~4,2%
  44. set t_dd=%ymd:~6,2%
  45. rem 执行ftp操作的起始时间点
  46. set StartTime=%Time:~0,2%:%Time:~3,2%:%Time:~6,2%
  47. rem ftp同步数据的根路径
  48. set BACKUP_ROOT=E:\xx\backup
  49. rem 同步备份文件到本地的ftp执行脚本
  50. set FTP_CMD_FILE=%BACKUP_ROOT%\ftpcmd.txt
  51. rem 同步备份文件到本地的数据文件根路径
  52. set BACKUP_DATA_DIR=%BACKUP_ROOT%
  53. rem 同步备份文件到本地的记录日志文件根路径
  54. set BACKUP_LOG_DIR=%BACKUP_ROOT%\log
  55. rem 阿里生产服务器上,知效平台备份数据文件存放的根路径
  56. set BACKUP_DATA=/oracle
  57. echo 将下载日期为%t_yyyy%%t_mm%%t_dd%的数据。。。。。。 > %BACKUP_LOG_DIR%\%ymd%.log
  58. rem 跳转到ftp中知效备份文件所在路径
  59. echo cd /oracle
  60. rem ===生成FTP命令====
  61. echo open %FTP_SERVER%>%FTP_CMD_FILE%
  62. echo %FTP_USER%>>%FTP_CMD_FILE%
  63. echo %FTP_PASSWORD%>>%FTP_CMD_FILE%
  64. echo binary>>%FTP_CMD_FILE%
  65. echo literal pasv>>%FTP_CMD_FILE%
  66. rem 选择本地服务器同步备份路径
  67. echo lcd %BACKUP_DATA_DIR%>>%FTP_CMD_FILE%
  68. rem 选择阿里云服务器备份路径
  69. echo cd  %BACKUP_DATA%>>%FTP_CMD_FILE%
  70. echo get tczx_%t_yyyy%%t_mm%%t_dd%.log>>%FTP_CMD_FILE%
  71. rem ftp执行完成后退出命令
  72. echo quit>>%FTP_CMD_FILE%
  73. rem 调用ftp脚本执行完整命令,即:将所有要执行的ftp命令都存放在 ftpcmd.txt 后,统一用以下命令调用执行ftp
  74. ftp -i -s:%FTP_CMD_FILE%
  75. rem 执行ftp操作的结束时间点
  76. set EndTime=%Time:~0,2%:%Time:~3,2%:%Time:~6,2%
  77. echo FTP下载数据开始时间:%StartTime%,结束时间:%EndTime%  >> %BACKUP_LOG_DIR%\%ymd%.log


 

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号