Python3.8
MySQL8.0.23-0ubuntu0.20.04.1用于x86_64 ((Ubuntu))
嗨,
我想使用python的mysqldb连接器和paramiko的ssh隧道转发器连接到一个遥远的mysql服务器。
通过执行以下操作,我可以远程连接到数据库,而不会出现任何问题:
使用mysql密码身份验证连接数据库
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身份验证连接数据库
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)它引发以下错误:
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中添加了下一行
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隧道访问。
发布于 2021-04-21 09:55:57
使用auth_socket插件对远程mysql服务器进行身份验证是不可能的,因为该插件需要本地访问套接字文件。有关更多信息,请参见此thread。
https://stackoverflow.com/questions/67076584
复制相似问题