python sshtunnel没有启动服务器给定凭据
Posted
技术标签:
【中文标题】python sshtunnel没有启动服务器给定凭据【英文标题】:python sshtunnel not starting server given credentials 【发布时间】:2021-11-12 16:19:41 【问题描述】:所以我试图让mysql-connector-python
与sshtunnel
合作
with SSHTunnelForwarder(('192.168.0.1', 22), ssh_username='pi', ssh_password='*********', remote_bind_address=('localhost', 3306)) as tunnel:
tunnel.start()
mydb = mysql.connector.connect(host="localhost",
user='Mashu',
password='*******',
port=tunnel.local_bind_port,
db='mysql')
print(mydb)
cur = mydb.cursor()
cur.execute('USE mysql')
print(cur.execute('SELECT * FROM user'))
它似乎执行得很顺利,但是当我想创建光标时它说
mysql.connector.errors.OperationalError: MySQL Connection not available.
我进一步调查,发现与本地绑定相关的值,所以local_bind_address
,local_bind_host
等都设置为错误,说:
Server is not started. Please .start() first!
即使我的代码中有tunnel.start()
我确实检查了,我的服务器对于其他程序(例如 DataGrip)是可见的,我不知道问题出在哪里。
【问题讨论】:
【参考方案1】:您正在使用带有with SSHTunnelForwarder
的上下文管理器,这意味着它将在退出范围时关闭连接。将cur = mydb.cursor
放在上下文管理器范围内将解决问题。
【讨论】:
以上是关于python sshtunnel没有启动服务器给定凭据的主要内容,如果未能解决你的问题,请参考以下文章
通过Python用pymysql,通过sshtunnel模块ssh连接远程数据库。
Python用MySQLdb, pymssql 模块通过sshtunnel连接远程数据库