当前位置:首页 » 数据仓库 » 两网之间不通怎么传输数据库
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

两网之间不通怎么传输数据库

发布时间: 2023-05-14 01:59:58

❶ 电脑怎样通过互联网传输数据

网络中数据传输过程

我们每天都在使用互联网,我们电脑上的数据是怎么样通过互联网传输到到另外的一台电脑上的呢?

我们知道现在的互联网中使用的TCP/IP协议是基于,OSI(开放系统互联)的七层参考模型的,(虽然不是完全符合)从上到下分别为 应用层 表示层 会话层 传输层 网络层 数据链路层和物理层。其中数据链路层又可是分为两个子层分别为逻辑链路控制层(Logic Link Control,LLC )和介质访问控制层((Media Access Control,MAC )也就是平常说的MAC层。LLC对两个节点中的链路进行初始化,防止连接中断,保持可靠的通信。MAC层用来检验包含在每个桢中的地址信息。在下面会分析到。还要明白一点路由器是在网路层的,而网卡在数据链路层。

我们知道,ARP(Address Resolution Protocol,地址转换协议)被当作底层协议,用于IP地址到物理地址的转换。在以太网中,所有对IP的访问最终都转化为对网卡MAC地址的访问。如果主机A的ARP列表中,到主机B的IP地址与MAC地址对应不正确,由A发往B数据包就会发向错误的MAC地址,当然无法顺利到达B,结 果是A与B根本不能进行通信。

首先我们分析一下在同一个网段的情况。假设有两台电脑分别命名为A和B,A需要相B发送数据的话,A主机首先把目标设备B的IP地址与自己的子网掩码进行“与”操作,以判断目标设备与自己是否位于同一网段内。如果目标设备在同一网段内,并且A没有获得与目标设备B的IP地址相对应的MAC地址信息,则源设备(A)以第二层广播的形式(目标MAC地址为全1)发送ARP请求报文,在ARP请求报文中包含了源设备(A)与目标设备(B)的IP地址。同一网段中的所有其他设备都可以收到并分析这个ARP请求报文,如果某设备发现报文中的目标IP地址与自己的IP地址相同,则它向源设备发回ARP响应报文,通过该报文使源设备获得目标设备的MAC地址信息。为了减少广播量,网络设备通过ARP表在缓存中保存IP与MAC地址的映射信息。在一次 ARP的请求与响应过程中,通信双方都把对方的MAC地址与IP地址的对应关系保存在各自的ARP表中,以在后续的通信中使用。ARP表使用老化机制,删除在一段时间内没有使用过的IP与MAC地址的映射关系。一个最基本的网络拓扑结构:

PC-A并不需要获取远程主机(PC-C)的MAC地址,而是把IP分组发向缺省网关,由网关IP分组的完成转发过程。如果源主机(PC-A)没有缺省网关MAC地址的缓存记录,则它会通过ARP协议获取网关的MAC地址,因此在A的ARP表中只观察到网关的MAC地址记录,而观察不到远程主机的 MAC地址。在以太网(Ethernet)中,一个网络设备要和另一个网络设备进行直接通信,

除了知道目标设备的网络层逻辑地址(如IP地址)外,还要知道目标设备的第二层物理地址(MAC地址)。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。 数据包在网络中的发送是一个及其复杂的过程,上图只是一种很简单的情况,中间没有过多的中间节点,其实现实中只会比这个更复杂,但是大致的原理是一致的。

(1)PC-A要发送数据包到PC-C的话,如果PC-A没有PC-C的IP地址,则PC-A首先要发出一个dns的请求,路由器A或者dns解析服务器会给PC-A回应PC-C的ip地址,这样PC-A关于数据包第三层的IP地址信息就全了:源IP地址:PC-A,目的ip地址:PC-C。

(2)接下来PC-A要知道如何到达PC-C,然后,PC-A会发送一个arp的地址解析请求,发送这个地址解析请求,不是为了获得目标主机PC-C的MAC地址,而是把请求发送到了路由器A中,然后路由器A中的MAC地址会发送给源主机PC-A,这样PC-A的数据包的第二层信息也全了,源MAC地址:PC-A的MAC地址,目的MAC地址:路由器A的MAC地址,

(3)然后数据会到达交换机A,交换机A看到数据包的第二层目的MAC地址,是去往路由器A的,就把数据包发送到路由器A,路由器A收到数据包,首先查看数据包的第三层ip目的地址,如果在自己的路由表中有去往PC-C的路由,说明这是一个可路由的数据包。 (4)然后路由器进行IP重组和分组的过程。首先更换此数据包的第二层包头信息,路由器PC-A到达PC—C要经过一个广域网,在这里会封装很多广域网相关的协议。其作用也是为了找下一阶段的信息。同时对第二层和第三层的数据包重校验。把数据经过Internet发送出去。最后经过很多的节点发送到目标主机PC_C中。

现在我们想一个问题,PC-A和PC-C的MAC地址如果是相同的话,会不会影响正常的通讯呢!答案是不会影响的,因为这两个主机所处的局域网被广域网分隔开了,通过对发包过程的分析可以看出来,不会有任何的问题。而如果在同一个局域网中的话,那么就会产生通讯的混乱。当数据发送到交换机是,这是的端口信息会有两个相同的MAC地址,而这时数据会发送到两个主机上,这样信息就会混乱。因此这也是保证MAC地址唯一性的一个理由。


  • 我暂且按我的理解说说吧。

先看一下计算机网络OSI模型的七个层次:

┌—————┐

│ 应用层 │←第七层

├—————┤

│ 表示层 │

├—————┤

│ 会话层 │

├—————┤

│ 传输层 │

├—————┤

│ 网络层 │

├—————┤

│数据链路层│

├—————┤

│ 物理层 │←第一层

└—————┘


而我们现在用的网络通信协议TCP/IP协议者只划分了四成:


┌—————┐

│ 应用层 │ ←包括OSI的上三层

├—————┤

│ 传输层 │

├—————┤

│ 网络层 │

├—————┤

│网络接口层 │←包括OSI模型的下两层,也就是各种不同局域网。

└—————┘


两台计算机通信所必须需要的东西:IP地址(网络层)+端口号(传送层)。


两台计算机通信(TCP/IP协议)的最精简模型大致如下:


主机A---->路由器(零个或多个)---->主机B


举个例子:主机A上的应用程序a想要和主机B上面的应用程序b通信,大致如下


程序a将要通信的数据发到传送层,在传送层上加上与该应用程序对应的通信端口号(主机A上不同的应用程序有不同的端口号),如果是用的TCP的话就加上TCP头部,UDP就加上UDP头部。

在传送成加上头部之后继续向往下传到网络层,然后加上IP头部(标识主机地址以及一些其他的数据,这里就不详细说了)。

然后传给下层到数据链路层封装成帧,最后到物理层变成二进制数据经过编码之后向外传输。


在这个过程中可能会经过许多各种各样的局域网,举个例子:


主机A--->(局域网1--->路由器--->局域网2)--->主机B


这个模型比上面一个稍微详细点,其中括号里面的可以没有也可能有一个或多个,这个取决于你和谁通信,也就是主机B的位置。


主机A的数据已经到了具体的物理介质了,然后经过局域网1到了路由器,路由器接受主机A来的数据先经过解码,还原成数据帧,然后变成网络层数据,这个过程也就是主机A的数据经过网络层、数据链路层、物理层在路由器上面的一个反过程。

然后路由器分析主机A来的数据的IP头部(也就是在主机A的网络层加上的数据),并且修改头部中的一些内容之后继续把数据传送出去。


一直到主机B收到数据为止,主机B就按照主机A处理数据的反过程处理数据,直到把数据交付给主机B的应用程序b。完成主机A到主机B的单方向通信。


这里的主机A、B只是为了书写方便而已,可能通信的双方不一定就是个人PC,服务器与主机,主机与主机,服务器与服务器之间的通信大致都是这样的。


再举个例子,我们开网页上网络:

就是我们的主机浏览器的这个应用程序和网络的服务器之间的通信。应用成所用的协议就是HTTP,而服务器的端口号就是熟知端口号80.


大致过程就是上面所说,其中的细节很复杂,任何一个细节都可以写成一本书,对于非专业人员也没有必要深究。

❷ 不在用一个局域网内,一台电脑如何访问另一电脑的数据库

1.通过internet进行连接.
把装有sql SERVER 2000的电脑的IP,以及数据库的端口,映射到外网.
通过外网的IP及端口进行连接.
2.如果两台电脑之间没有使用网络或者物理连接,那我想,是没撤了.

❸ 两个不同数据的服务器上的数据库之间通信,如何实现

朋友你好,我之前也碰到过这样的问题,你搭建openvpn在2个服务器之间建立VPN通道,这样相对数据也比较安全,需要另一台服务器的数据可以通过字段用程序调取就可以了。

❹ 2台服务器之间使用网闸怎么才能连接上数据库

你描述的不太清楚!我估计是你的意思是通过网站连接数据库的!
我现在假设你用的是ASP语言!
第一种情况 就是连接ACCESS数据库 使用下面的代码就可以了
dim connstr,conn,rs,sql
connstr="driver={Microsoft Access Driver (*.mdb)};Dbq=" & Server.MapPath("wubo.mdb")
set conn=server.CreateObject("adodb.connection")
conn.open connstr
set rs=server.CreateObject("adodb.recordset")
sql="select count(*) from kh "
rs.open sql,conn,1,1

第二种情况就是连接SQL数据库
set conn=server.createobject("ADODB.connection")
conn.open"Driver={SQL Server};Server=(local);DataBase=lht;uid=sa;pwd="
set rs=server.CreateObject("ADODB.recordset")
sql = "select * from board"
rs.Open sql,conn,3,1

注意自己需要修改一下表名和数据库名字!

❺ 两个数据库之间传输数据有几种方法

一种商业数据库的数据传输方法,其包括至少一个中间文件服务器,数据存储方之间通过中间文件服务器交换数据,其数据传输步骤如下:接收方的数据统计信息包含数据发送申请文件中,将数据发送申请文件发送到中间文件服务器;发送方接收到中间文件服务器转发的数据发送申请文件后,分析申请文件中的数据统计信息,对比双方数据是否一致,发送方将数据包发送到FTP

❻ 如何在两台服务器之间安全迁移MySQL数据库

迁移MySQL数据库通常只需要几个简单的步骤,但是由于您要转移的数据量可能比较庞大,因此一般耗时也会比较长。

下面的步骤将指导您如何从旧的服务器上导出MySQL数据库,对它进行安全加固;然后将其复制并导入到新的服务器上,以保证数据的完整。

将MySQL数据库导出至转储文件(mp file)

Oracle提供了一个名为mysqlmp的工具,允许您轻松地将数据库结构和其数据导出到一个SQL的转储文件。您可以使用如下的命令:

1.mysqlmp -u root -p --opt [database name] > [database name].sql

不过,请注意如下几点:

我们可以使用--single-transaction的标志,以避免数据库在导出数据的过程中被锁死。这样能够在将数据导出到转储文件的同时,您仍可继续在旧的数据库上更新数据。不过请注意,那些在导出进程已经开始之后被更新的数据,是不会被导入转储文件之中的。

在运行该命令之前,请务必将[database name]替换成您的实际数据库名称。

请输入您自己的用户名和相对应的密码,并确保该用户具有备份数据库所需的权限。

安全加固备份文件

在大多数情况下,数据是一家企业的最重要的资产。因此,我们不希望数据库的各种备份被暴露在不受保护的服务器上,因为这样有可能会造成错误地泄露,甚至会出现被黑客窃取等更为糟糕的状况。

因此,通常您可以尝试的做法是:压缩、加密文件,然后删除原文件。在Linux操作系统上,请使用以下的命令对已压缩文件进行加密:

1.zip --encrypt mp.zip db.sql

在压缩开始之前,系统将提示您输入密码。

传输备份文件

至此,我们已经获得了一个加密的转储文件。下面让我们通过网络使用SCP命令,将其传输到新的服务器上:

1.scp /path/to/source-file user@host:/path/to/destination-folder/

将MySQL转储导入新服务器

通过上面一步,我们已将备份文件传到了新的服务器上,下面让我们来进行解密和提取:

1.unzip -P your-password mp.zip

为了存储空间和安全方面的原因,一旦文件导入成功,请记得删除其对应的转储文件。

您可以使用以下的命令来导入文件:

1.mysql -u root -p newdatabase < /path/to/newdatabase.sql

在新服务器上验证导入的数据

现在我们在新服务器上已经导入了数据库,那么我们就需要一种方法来验证数据的真实存在,并确保没有任何遗漏。

我建议您同时在旧的和新的数据库上运行如下查询,并将获得的结果进行对比。

该查询会在所有的表里计算行数,以显示出新、旧数据库中的数据量。

1.SELECT

2.TABLE_NAME,

3.TABLE_ROWS

4.FROM

`

5.information_schema`.`tables`

6.WHERE

`

7.table_schema` = 'YOUR_DB_NAME';

此外,我建议您检查各个表中数字列的MIN和MAX记录,以确保数据本身是有效的,而不仅仅是看数据的总量(虽然这是查询所唯一能够读出的值)。另一种可供测试的选择是将数据库从新的服务器导出为SQL转储文件,并将其与旧服务器的SQL转储文件做比较。

此外,在应用程序被迁移之前,我建议您先将一个应用程序的实例重定向到新的数据库上,以确认一切运行正常。

另一种导出和导入的选项

我们之所以把该选项放在最后,是因为我们的确不建议您去使用它。

该方法实现起来非常的容易,因为它仅使用一个命令,便能一次性将转储文件导出、传输、并将其数据导入到新的数据库之中。

而它的不足之处在于,一旦其网络链接断掉,您就需要重新启动它了。

因此,我们认为它并不值得被推荐,尤其是在大型数据库中,可能会非常不适用。

当然,如果您非要尝试一下的话,可以使用如下的命令:

1.mysqlmp -u root -pPassword --all-databases | ssh user@new_host.host.com 'cat - | mysql -u root -pPassword'

重要提示

请确保在新旧两处,安装有相同官方发行版本的MySQL服务器。否则,你需要按照MySQL网站上的升级说明来进行统一(请参见(https://dev.mysql.com/doc/refman/5.7/en/upgrading.html)。

请确保您在旧的服务器上拥有足够的空间来保存转储文件和压缩文件(应该有db_size×2的空间)。

请确保您在新的服务器上拥有足够的空间来保存加密的和解密的转储文件、并能导入数据库(应该有db_size×3的空间)。

如果您曾经考虑过只是将datadir从一个数据库转移到另一个的话,我建议您最好不要这样做。否则,您会搞乱数据库的内部结构,而且会给将来可能的问题埋下隐患。

在新的服务器配置中,请不要忘了配置诸如innodb_log_file_size这样的重要标志。因为如果忘记了根据新服务器的规格而更新配置的话,很可能会导致严重的性能问题。

在许多情况下,一般升级到新的数据库服务器的初衷是为了提高查询性能。而如果此类升级没有达到预期的改善,那么您就应该考虑去优化SQL查询,而不仅仅是升级硬件那么简单了

❼ 如何实现两个异地数据库之间的数据传输

1. SQLSERVER服务器上面安装oracle客户端,配置服务命名(假设为 test)
2. 在SQLSERVER服务器上面建立链接服务器,脚本如下

SQL code?
SQL code-- Adding linked server:

exec sp_addlinkedserver @server = 'test' ,
@srvproct = 'ORACLE',
@provider = 'MSDAORA',
@datasrc = 'test'
-- Adding linked server login:
exec sp_addlinkedsrvlogin @useself='false ', @rmtsrvname = 'test',
@rmtuser = 'user', --数据库用户
@rmtpassword = 'password' --密码
3. 建立一个作业,通过作业调度存储过程,存储过程使用类似的语句将oracle的数据插入到sqlserver表中

SQL code?
insert into sqlserver表 select * from test..oracle表名
4. 如果要球ORACLE数据是实时增加的,并且ORACLE记录上有递增的字段,可以在SQLSERVER上面建立一个表记录上次插入的id,然后下次可以从上次的ID+1开始继续插入

SQL code?
insert into sqlserver表 select * from test..oracle表名 where id>@id
5. 防止sqlserver同步的时候oracle仍在不断的插入,每次要取一个结束ID

SQL code?
select @endid=max(id) from test..oracle表名.