【问题标题】:Python: error connecting to mysql server using socketPython:使用套接字连接到 mysql 服务器时出错
【发布时间】:2021-06-10 18:54:26
【问题描述】:

我正在尝试连接到我的本地 mysqlserver。

以下代码在另一台机器上工作:

root@host> mysql  --protocol=SOCKET
MariaDB [(none)]>

root@host> ls -la /var/run/mysqld/mysqld.sock 
srwxrwxrwx 1 mysql mysql 0 Jun  9 20:27 /var/run/mysqld/mysqld.sock

root@host> python3
>>> import mysql.connector
>>> mysql.connector.connect( unix_socket='/var/run/mysqld/mysqld.sock' )

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3/dist-packages/mysql/connector/__init__.py", line 173, in connect
    return MySQLConnection(*args, **kwargs)
File "/usr/lib/python3/dist-packages/mysql/connector/connection.py", line 102, in __init__
    self.connect(**kwargs)
File "/usr/lib/python3/dist-packages/mysql/connector/abstracts.py", line 735, in connect
    self._open_connection()
File "/usr/lib/python3/dist-packages/mysql/connector/connection.py", line 250, in _open_connection
    self._do_auth(self._user, self._password,
File "/usr/lib/python3/dist-packages/mysql/connector/connection.py", line 172, in _do_auth
    self._auth_switch_request(username, password)
File "/usr/lib/python3/dist-packages/mysql/connector/connection.py", line 216, in _auth_switch_request
    raise errors.get_exception(packet)
mysql.connector.errors.ProgrammingError: 1698 (28000): Access denied for user ''@'localhost'

问题的根源可能是什么?

注意

  • 出于某种原因,我想使用 Socket 而不是 TCP。
  • 我不想使用用户名/密码。
  • 这适用于我的另一台主机,但我不知道为什么它不能在这个主机上运行。

【问题讨论】:

  • 错误显示Access denied for user ''@'localhost',因此您无法使用空用户访问它。
  • 感谢您的评论。我尝试添加 user="root" 但这导致1698 (28000): Access denied for user 'root'@'localhost'
  • 你试过password= ..吗?我在使用 mysql-connector 连接时遇到问题,但在我删除它并安装 mysql-connector-python(由 MySQL 创建)时没有问题

标签: python mysql mysql-python


【解决方案1】:

我建议首先使用 MYSQL 工作台或 Dbeaver 等 GUI 工具连接到您的数据库,如果已建立,您可以使用此脚本连接到您的数据库:

from getpass import getpass
from mysql.connector import connect, Error

try:
    with connect(
        host="localhost",
        user=input("Enter username: "),
        password=getpass("Enter password: "),
    ) as connection:
        print(connection)
except Error as e:
    print(e)

我希望这些可以帮助您解决问题。

【讨论】:

  • 感谢您的回答。我知道如何使用 TCP 连接到 mysql。我的问题是关于使用套接字连接。 root@host&gt; mysql --protocol=SOCKET 测试这是否有效(确实有效)但不适用于此特定主机上的 python。
【解决方案2】:

如果你想在socket上使用mysql,你可以使用这个方法:

import MySQLdb
db = MySQLdb.connect("localhost", "root", "l542212h", "TESTDB", charset='utf8' ,unix_socket="/tmp/mysql.sock")

希望能帮助您解决问题。

【讨论】:

  • 再次感谢您的分析器和您的努力;)我不想使用用户名和密码,就像我在 mysql --protocol=SOCKET 命令中不需要它们一样。正如我写的那样,这在另一台主机上运行得很好。
猜你喜欢
  • 2014-03-01
  • 2020-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-29
  • 2021-02-11
相关资源
最近更新 更多