首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当数据库只能通过jumphost访问时,如何通过Python连接到MySQL

问当数据库只能通过jumphost访问时,如何通过Python连接到MySQL
EN

Stack Overflow用户
提问于 2019-04-17 19:27:24
回答 1查看 1.1K关注 0票数 0

我有一个MySQL数据库,只能通过一个跳转主机访问。我们尝试访问MySQL的拓扑如下所示

客户端主机-> jumphost -> MySQL

通过使用以下命令ssh -At -L 3306的SSL端口转发来访问用户: MySQL :3306user@jumphost

创建隧道后,在主机为本地主机、端口为3306的情况下,从运行在客户机主机上的工作台成功连接到MySQL。

但是,如果我试图通过MySQL的pymysql模块使用相同的连接属性(主机:本地主机,端口: 3306)访问MySQL,则会出现以下错误:(2003,"Can't connect to mysql server on ' localhost‘(Errno99 Cannot assign requested )“)

代码详细信息:

代码语言:javascript
复制
import pymysql
import pandas

def getQueryResult(query):
    host = 'localhost';
    password = 'something';
    database = 'test';

    conn = pymysql.connect(host=host, port=int(3306), user="someuser", passwd=password, db=database);
    df = pandas.read_sql_query(query, conn);
    conn.close();
    return df;

我们希望连接能够成功建立,但是我们得到了一个跟踪错误

代码语言:javascript
复制
OSErrorTraceback (most recent call last)
/opt/conda/lib/python3.6/site-packages/pymysql/connections.py in connect(self, sock)
    957                                 (self.host, self.port), self.connect_timeout,
--> 958                                 **kwargs)
    959                             break

/opt/conda/lib/python3.6/socket.py in create_connection(address, timeout, source_address)
    723     if err is not None:
--> 724         raise err
    725     else:

/opt/conda/lib/python3.6/socket.py in create_connection(address, timeout, source_address)
    712                 sock.bind(source_address)
--> 713             sock.connect(sa)
    714             # Break explicitly a reference cycle

OSError: [Errno 99] Cannot assign requested address

During handling of the above exception, another exception occurred:

My Code callstack:省略这些框架

代码语言:javascript
复制
/opt/conda/lib/python3.6/site-packages/pymysql/__init__.py in Connect(*args, **kwargs)
     88     """
     89     from .connections import Connection
---> 90     return Connection(*args, **kwargs)
     91 
     92 from . import connections as _orig_conn

/opt/conda/lib/python3.6/site-packages/pymysql/connections.py in __init__(self, host, user, password, database, port, unix_socket, charset, sql_mode, read_default_file, conv, use_unicode, client_flag, cursorclass, init_command, connect_timeout, ssl, read_default_group, compress, named_pipe, no_delay, autocommit, db, passwd, local_infile, max_allowed_packet, defer_connect, auth_plugin_map, read_timeout, write_timeout, bind_address, binary_prefix)
    702             self._sock = None
    703         else:
--> 704             self.connect()
    705 
    706     def _create_ssl_ctx(self, sslp):

/opt/conda/lib/python3.6/site-packages/pymysql/connections.py in connect(self, sock)
   1003                 exc.traceback = traceback.format_exc()
   1004                 if DEBUG: print(exc.traceback)
-> 1005                 raise exc
   1006 
   1007             # If e is neither DatabaseError or IOError, It's a bug.

OperationalError: (2003, "Can't connect to MySQL server on 'localhost' ([Errno 99] Cannot assign requested address)")
EN

回答 1

Stack Overflow用户

发布于 2019-04-17 19:40:31

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55726516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档