求助 v 站大佬 如何利用 Python 迁移数据 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
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 2019-08-05 17:39:45 +08:00 3247 次点击
    这是一个创建于 2334 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有个每天定时的数据迁移任务,数据源在远程服务器 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 条回复    2019-08-16 22:11:44 +08:00
    Aliencn
        1
    Aliencn  
       2019-08-05 18:05:00 +08:00
    python 只是个工具,python 不能完全实现就换别的方式呗
    比如找个能双向同步的 XX 网盘,或者利用阿里云 OSS 做文件中转。
    然后再用 python 做一辅助的拷贝校验工作,就行了
    cz5424
        2
    cz5424  
       2019-08-05 18:12:11 +08:00   1
    感觉是实现手段有问题...

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

    不应该直接链接数据库 a, 读取后发到数据库 b?
    liwenbest
        3
    liwenbest  
    OP
       2019-08-05 18:28:11 +08:00
    @cz5424 主要是要链接 vpn 才能把数据迁移过去,这 vpn 登录半小时如果没有链接数据库会自动断开 ,所以每次迁移前要登录下 vpn
    jdhao
        4
    jdhao  
       2019-08-05 18:33:44 +08:00 via Android
    @liwenbest 好像一直 ping 服务器地址,vpn 就不会断了
    awm47
        5
    awm47  
       2019-08-05 18:38:47 +08:00
    数据库迁移?为啥不考虑主从实现?
    inwar
        6
    inwar  
       2019-08-05 18:42:08 +08:00 via Android
    @liwenbest 照楼上一直 ping,或者搞个心跳几分钟从数据库获取个数据
    zst
        7
    zst  
       2019-08-05 18:43:32 +08:00 via Android
    用个心跳包呗
    cz5424
        8
    cz5424  
       2019-08-05 20:03:12 +08:00 via iPhone
    @liwenbest 这个自动断也是 vpn 设置吧,改一下不行?
    cz5424
        9
    cz5424  
       2019-08-05 20:04:20 +08:00 via iPhone
    很明显你的错误提示就是 socket 超时
    aSmallNewbie
        10
    aSmallNewbie  
       2019-08-06 09:40:36 +08:00
    非要翻墙???直接用 ip 地址也会被墙???
    aSmallNewbie
        11
    aSmallNewbie  
       2019-08-06 09:41:08 +08:00
    vpn 看错了。。。
    37Y37
        12
    37Y37  
       2019-08-06 10:20:37 +08:00
    lmingzhi08
        13
    lmingzhi08  
       2019-08-15 20:09:23 +08:00 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
       2019-08-16 22:11:44 +08:00
    用 SSHTunnelForwarder 报了个错 无法 10054] 远程主机强迫关闭了一个现有的连接。
    Could not establish session to SSH gateway
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2725 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 15:01 PVG 23:01 LAX 07:01 JFK 10:01
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86