V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
liwenbest
V2EX  ›  Python

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

  •  
  •   liwenbest · Aug 5, 2019 · 3465 views
    This topic created in 2457 days ago, the information mentioned may be changed or developed.
    有个每天定时的数据迁移任务,数据源在远程服务器 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

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

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

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

    其实感觉也可以直接用 bash 脚本,A 服务器定时将数据库的数据导出成本地文件,将本地文件 rsync 到远程服务器 B, 远程服务器 B 将文件导入到数据库
    liwenbest
        14
    liwenbest  
    OP
       Aug 16, 2019
    用 SSHTunnelForwarder 报了个错 无法 10054] 远程主机强迫关闭了一个现有的连接。
    Could not establish session to SSH gateway
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3136 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 50ms · UTC 14:41 · PVG 22:41 · LAX 07:41 · JFK 10:41
    ♥ Do have faith in what you're doing.