求助 v 站大佬 如何利用 Python 迁移数据

2019-08-05 17:39:45 +08:00
 liwenbest
有个每天定时的数据迁移任务,数据源在远程服务器 A 数据库中,要每天把数据迁移到另一个远程服务器 B 的数据库中,其中 A 需要通过登录 ssh-vpn 才能把数据搬到 B 中,用 python 设计成自动化迁移,有个难题是 ssh-vpn 每隔半小时会断开,需要手动重新登录,考虑了两种方式都失败了,请大佬指点下:
1、使用 Python pymouse 每天在迁移前定时点击远程桌面的 EasyConnect,登录 vpn 再进行数据迁移作业;失败原因:由于是在远程桌面,离开远程桌面后,程序无法捕获鼠标位置,无法点击 EasyConnect,登录 vpn ;
2、利用 from sshtunnel import SSHTunnelForwarder python 链接 vpn

server = SSHTunnelForwarder(ssh_address_or_host=('ip', port), # 指定 SSH 中间登录地址和端口号
ssh_username='账号', # 指定地址 B 的 SSH 登录用户名
ssh_password='密码', # 指定地址 B 的 SSH 登录密码
#local_bind_address=('ip',port), # 绑定本地地址 A (默认 127.0.0.1 )及与 B 相通的端口(根据网络策略配置,若端口全放,则此行无需配置,使用默认即可)
remote_bind_address=('ip', port) # 指定最终目标 C 地址,端口号为 mysql 默认端口号 3306
)

报错:
2019-08-05 16:52:11,045| ERROR | Exception: Error reading SSH protocol banner[WinError 10054] 远程主机强迫关闭了一个现有的连接。
2019-08-05 16:52:11,153| ERROR | Traceback (most recent call last):
2019-08-05 16:52:11,153| ERROR | File "D:\python\lib\site-packages\paramiko\transport.py", line 2211, in _check_banner
2019-08-05 16:52:11,153| ERROR | buf = self.packetizer.readline(timeout)
2019-08-05 16:52:11,153| ERROR | File "D:\python\lib\site-packages\paramiko\packet.py", line 380, in readline
2019-08-05 16:52:11,153| ERROR | buf += self._read_timeout(timeout)
2019-08-05 16:52:11,153| ERROR | File "D:\python\lib\site-packages\paramiko\packet.py", line 607, in _read_timeout
2019-08-05 16:52:11,153| ERROR | x = self.__socket.recv(128)
2019-08-05 16:52:11,154| ERROR | ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。
2019-08-05 16:52:11,154| ERROR |
2019-08-05 16:52:11,154| ERROR | During handling of the above exception, another exception occurred:
2019-08-05 16:52:11,154| ERROR |
2019-08-05 16:52:11,154| ERROR | Traceback (most recent call last):
2019-08-05 16:52:11,154| ERROR | File "D:\python\lib\site-packages\paramiko\transport.py", line 2039, in run
2019-08-05 16:52:11,154| ERROR | self._check_banner()
2019-08-05 16:52:11,154| ERROR | File "D:\python\lib\site-packages\paramiko\transport.py", line 2216, in _check_banner
2019-08-05 16:52:11,154| ERROR | "Error reading SSH protocol banner" + str(e)
2019-08-05 16:52:11,154| ERROR | paramiko.ssh_exception.SSHException: Error reading SSH protocol banner[WinError 10054] 远程主机强迫关闭了一个现有的连接。
2019-08-05 16:52:11,154| ERROR |
2019-08-05 16:52:11,154| ERROR | Could not connect to gateway ip:port : Error reading SSH protocol banner[WinError 10054] 远程主机强迫关闭了一个现有的连接。
Could not establish session to SSH gateway

百度了好久也没发现问题错在哪里,请各位大佬不吝赐教,谢谢
2630 次点击
所在节点    Python
14 条回复
Aliencn
2019-08-05 18:05:00 +08:00
python 只是个工具,python 不能完全实现就换别的方式呗
比如找个能双向同步的 XX 网盘,或者利用阿里云 OSS 做文件中转。
然后再用 python 做一些辅助的拷贝校验工作,就行了
cz5424
2019-08-05 18:12:11 +08:00
感觉是实现手段有问题...

```
有个每天定时的数据迁移任务,数据源在远程服务器 A 数据库中,要每天把数据迁移到另一个远程服务器 B 的数据库中,
```

不应该直接链接数据库 a, 读取后发到数据库 b?
liwenbest
2019-08-05 18:28:11 +08:00
@cz5424 主要是要链接 vpn 才能把数据迁移过去,这 vpn 登录半小时如果没有链接数据库会自动断开 ,所以每次迁移前要登录下 vpn
jdhao
2019-08-05 18:33:44 +08:00
@liwenbest 好像一直 ping 服务器地址,vpn 就不会断了
jaynos
2019-08-05 18:38:47 +08:00
数据库迁移?为啥不考虑主从实现?
inwar
2019-08-05 18:42:08 +08:00
@liwenbest 照楼上一直 ping,或者搞个心跳几分钟从数据库获取个数据
zst
2019-08-05 18:43:32 +08:00
用个心跳包呗
cz5424
2019-08-05 20:03:12 +08:00
@liwenbest 这个自动断也是 vpn 设置吧,改一下不行?
cz5424
2019-08-05 20:04:20 +08:00
很明显你的错误提示就是 socket 超时
aSmallNewbie
2019-08-06 09:40:36 +08:00
非要翻墙???直接用 ip 地址也会被墙???
aSmallNewbie
2019-08-06 09:41:08 +08:00
vpn 看错了。。。
37Y37
2019-08-06 10:20:37 +08:00
lmingzhi08
2019-08-15 20:09:23 +08:00
1 远程服务器 A,B 是否为 linux 系统
2 A 服务器是否可以通过 ssh(bash 端)访问 B 服务器
3 如果满足前面 2 个,那么可以用 SSHTunnelForwarder 做端口映射,将在 A 服务器将远程的 B 服务器上面的数据库端口映射在本地
4 在 A 服务器用 python 访问本地数据库和远程数据库,完成数据迁移

其实感觉也可以直接用 bash 脚本,A 服务器定时将数据库的数据导出成本地文件,将本地文件 rsync 到远程服务器 B, 远程服务器 B 将文件导入到数据库
liwenbest
2019-08-16 22:11:44 +08:00
用 SSHTunnelForwarder 报了个错 无法 10054] 远程主机强迫关闭了一个现有的连接。
Could not establish session to SSH gateway

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/589268

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX