linux数据库文件上传至windows的ftp服务器(FTP服务器开启二进制传输)
我之前将linux上oracle数据库导出的文件上传至windows的ftp服务器,又刻录进磁带机,结果再导出传回linux时,发现数据没法回溯,原因是FTP服务器没有开启二进制传输。
于是做了以下记录
本案例将linux主机里数据库导出的文件,先上传至windows上的ftp服务器,再通过磁带机刻录储存。
FTP有两种传输模式
1.ASCII传输方式:
假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的不是UNIX,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。
但是常常有这样的情况,用户正在传输的文件包含的不是文本文件,它们可能是程序,数据库,字处理文件或者压缩文件(尽管字处理文件包含的大部分是文本,其中也包含有指示页尺寸,字库等信息的非打印字符)。在拷贝任何非文本文件之前,用binary 命令告诉ftp逐字拷贝,不要对这些文件进行处理,这也是下面要讲的二进制传输。
2.二进制传输模式:
在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。例如,macintosh以二进制方式传送可执行文件到Windows系统,在对方系统上,此文件不能执行。
如果你在ASCII方式下传输二进制文件,即使不需要也仍会转译。这会使传输稍微变慢 ,也会损坏数据,使文件变得不能用。(在大多数计算机上,ASCII方式一般假设每一字符的第一有效位无意义,因为ASCII字符组合不使用它。如果你传输二进制文件,所有的位都是重要的。)如果你知道这两台机器是同样的,则二进制方式对文本文件和数据文件都是有效的。
3.传输过程:
# ftp 172.168.10.8
Connected to 172.168.10.8 (172.168.10.8).
# 输入用户名和密码
Remote system type is Windows_NT.
# 进入windows的ftp服务器
ftp> dir
# 列出文件目录
227 Entering Passive Mode (172,168,10,8,230,63).
150 Opening ASCII mode data connection.
04-03-18 02:06PM <DIR> 172.168.10.1
04-03-18 01:24PM <DIR> bj_back_data
09-21-18 10:26AM <DIR> cpro
04-03-18 01:25PM <DIR> cpro_back_data
11-14-19 02:08PM <DIR> database_history_produce
04-03-18 01:27PM <DIR> JAVA
11-09-18 04:48PM <DIR> lishiwei
11-13-19 03:24AM <DIR> merServices
01-28-19 05:04PM <DIR> mobile_data
03-28-19 02:11PM <DIR> NETPAY
04-03-18 02:10PM <DIR> newqr_back_data
08-29-19 10:27AM <DIR> Newtsqs
04-03-18 02:11PM <DIR> oldqr_back_data
04-03-18 02:12PM <DIR> tpos_back_data
04-03-18 02:12PM <DIR> TreeSize Professional
04-24-18 08:15PM <DIR> tsp_back_data
11-13-19 04:18AM <DIR> UMP
04-08-18 11:11AM <DIR> ydzf_back_data
03-21-19 08:43AM <DIR> ZHPT
04-01-19 05:02PM <DIR> ZHZF
04-01-19 10:44AM <DIR> ZJJS
226 Transfer complete.
ftp> cd database_history_produce
# 切换至要上传文件的目地目录
250 CWD command successful.
ftp> ls
# ls同样可以列出文件菜单
# 使用bin命令开启二进制传输
ftp> bin
200 Type set to I.
ftp> send TRANSDB_FLPT_DBEXP_BEFORE_20190101_T_ACCOUNT_ANYCHANNEL.tar.gz
ftp> exit
221 Goodbye.
# 使用sendt命令+文件名进行上传
ftp>bin
# 开启二进制传输
ftp> get TRANSDB_FLPT_DBEXP_BEFORE_20190101_T_ACCOUNT_ANYCHANNEL.tar.gz
# 使用get命令+文件名进行下载
注意下载和上传前要进入需要存放文件的本地目录。
ASCII 和BINARY模式区别:
用HTML 和文本编写的文件必须用ASCII模式上传,用BINARY模式上传会破坏文件,导致文件执行出错。
BINARY模式用来传送可执行文件,压缩文件,和图片文件。
ASCII 模式和BINARY模式的区别是回车换行的处理,binary模式不对数据进行任何处理,asci模式将回车换行转换为本机的回车字符,比如Unix下是\n,Windows下是\r\n,Mac下是\r
ascii模式下会转换文件
不能说是不同系统对回车换行解释不同
而是不同的系统有不同的行结束符
unix系统下行结束符是一个字节,即十六进制的0A
而ms的系统是两个字节,即十六进制的0D0A
MAC系统是一个字节,即十六进制的0D
在拷贝任何非文本文件之前,用binary 命令告诉ftp逐字拷贝,不要对这些文件进行处理.
cd 在远程机上改变工作目录
lcd 在本地机上改变工作目录
ascii 设置文件传输方式为ASCII模式
binary 设置文件传输方式为二进制模式
get(mget) 从远程机传送指定文件到本地机
put(mput) 从本地机传送指定文件到远程机
open 连接远程ftp站点
! 转到Shell中
从远程系统获取文件
get和mget命令用于从远程机上获取文件。get命令的一般格式为:
get 文件名
您还可以给出本地文件名,这个文件名是这个要获取的文件在您的本地机上创建时的文件名。如果您不给出一个本地文件名,那么就使用远程文件原来的名字。
mget命令一次获取多个远程文件。mget命令的一般格式为:
mget 文件名列表
使用用空格分隔的或带通配符的文件名列表来指定要获取的文件,对其中的每个文件都要求用户确认是否传送。
向远程系统发送文件
put和mput命令用于向远程机发送文件。Put命令的一般格式为:
put 文件名
mput命令一次发送多个本地文件,mput命令的一般格式为:
mput 文件名列表
使用用空格分隔的或带通配符的文件名列表来指定要发送的文件。对其中的每个文件都要求用户确认是否发送。
FTP的工作方式
FTP支持两种模式,一种方式叫做Standard (也就是 PORT方式,主动方式),一种是 Passive (也就是PASV,被动方式)。
Standard模式 FTP的客户端发送 PORT 命令到FTP服务器。Passive模式FTP的客户端发送 PASV命令到 FTP Server。
下面介绍一个这两种方式的工作原理:
Port模式FTP 客户端首先和FTP服务器的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道
上发送PORT命令。 PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口连接至客户端
的指定端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。
Passive模式在建立控制通道的时候和Standard模式类似,但建立连接后发送的不是Port命令,而是Pasv命令。FTP服务器收到
Pasv命令后,随机打开一个高端端口(端口号大于1024)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端
口,然后FTP服务器将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接。
很多防火墙在设置的时候都是不允许接受外部发起的连接的,所以许多位于防火墙后或内网的FTP服务器不支持PASV模式,因为
客户端无法穿过防火墙打开FTP服务器的高端端口;而许多内网的客户端不能用PORT模式登陆FTP服务器,因为从服务器的TCP 20无
法和内部网络的客户端建立一个新的连接,造成无法工作。
FTP的连接模式有两种,PORT和PASV。PORT模式是一个主动模式,PASV是被动模式,这里都是相对于服务器而言的。主动模式就是服务器以20端口主动的去连接客户端的某个大于1024的端口(这个端口是客户端通过port命令告诉服务器的)。被动模式就是客户端用某个大于1024的端口去连接服务器的某个大于1024的端口。
如果从C/S模型这个角度来说,PORT对于服务器来说是OUTBOUND,而PASV模式对于服务器是INBOUND,这一点请特别注意,尤其是在使用防火墙的企业里,这一点非常关键,如果设置错了,那么客户将无法连接。
FTP两种传输模式小结
FTP是有两种传输的模式的,主动模式和被动模式,之前一直没怎么去搞明白之,现在找了下资料,
重新整理了下:
一个完整的FTP文件传输需要建立两种类型的连接,一种为文件传输下命令,称为控制连接,另一种实现真正的文件传输,称为数据连接。
-
控制连接
客户端希望与FTP服务器建立上传下载的数据传输时,它首先向服务器的TCP 21端口发起一个建立连接的请求,FTP服务器接受来自客户端的请求,完成连接的建立过程,这样的连接就称为FTP控制连接。
-
数据连接
FTP控制连接建立之后,即可开始传输文件,传输文件的连接称为FTP数据连接。FTP数据连接就是FTP传输数据的过程,它有两种传输模式
PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的XXXX端口发送连接请求,建立一条数据链路来传送数据。
PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口发送连接请求,建立一条数据链路来传送数据。