首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python mysqldb连接器无密码通过ssh连接到远程mysql服务器

使用python mysqldb连接器无密码通过ssh连接到远程mysql服务器
EN

Stack Overflow用户
提问于 2021-04-13 14:13:06
回答 1查看 283关注 0票数 0

Python3.8

MySQL8.0.23-0ubuntu0.20.04.1用于x86_64 ((Ubuntu))

嗨,

我想使用python的mysqldb连接器和paramiko的ssh隧道转发器连接到一个遥远的mysql服务器。

通过执行以下操作,我可以远程连接到数据库,而不会出现任何问题:

使用mysql密码身份验证连接数据库

代码语言:javascript
复制
server = new_ssh_server(config)
with server:
   print('Connection', server.local_bind_address)
   cnx = MySQLdb.connect(host = '127.0.0.1',
   port = server.local_bind_port,
   user = config['user'],
   passwd = config['password'],
   db = config['db'])

查询工作,我可以读写数据库,没有问题。

I希望通过ssh.使用mysql auth_socket身份验证方法连接数据库,而不提供mysql密码。

下面的代码可以继续我的尝试:

使用mysql auth_socket身份验证连接数据库

代码语言:javascript
复制
with server as tunnel:
    print('Tunnel:', tunnel.local_bind_address)
    cnx = MySQLdb.connect(host = 'localhost', user = 'hillbilly', password = '', db='tutut')#, unix_socket="/tmp/mysql.sock")
    res = pd.read_sql('select * from users;', cnx)
    print(res)

它引发以下错误:

代码语言:javascript
复制
File "connect_ssh_mysql_auth_socket.py", line 12, in <module>
    cnx = MySQLdb.connect(host = 'localhost', user = 'hillbilly', password = '', db='rsotest2')#, unix_socket="/tmp/mysql.sock")
  File "...../lib/python3.8/site-packages/MySQLdb/__init__.py", line 84, in Connect
    return Connection(*args, **kwargs)
  File "...../lib/python3.8/site-packages/MySQLdb/connections.py", line 179, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
MySQLdb._exceptions.OperationalError: (2002, "Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)")

我在远程服务器上有和现有的mysqld.sock,我将其符号链接到了上,但是错误仍然存在。我还在/etc/mysql/mysql.conf.d/mysql.cnf中添加了下一行

代码语言:javascript
复制
socket=/run/mysqld/mysqld.sock

但是,当我试图远程连接时,仍然会遇到同样的错误。

unix_socket='/run/mysqld/mysqld.sock'指定为mysqldb连接器(在中注释使用mysql auth_socket身份验证连接到数据库)并不修复此问题。

我似乎误解了mysql.sock,mysqld.sock的用法。我无法找到或创建mysql.sock套接字。我想做的事有可能吗?我记得在某个地方读到unix套接字只在本地工作,这是否意味着它无法实现?

如有任何帮助/解释,将不胜感激。

(编辑和关闭),所以这是不可能的。在这个thread之后,auth_socket需要本地访问套接字文件(通常是/tmp/mysql.sock)来运行autentication测试,因此无法通过ssh隧道访问。

EN

回答 1

Stack Overflow用户

发布于 2021-04-21 09:55:57

使用auth_socket插件对远程mysql服务器进行身份验证是不可能的,因为该插件需要本地访问套接字文件。有关更多信息,请参见此thread

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

https://stackoverflow.com/questions/67076584

复制
相关文章

相似问题

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