gpt4 book ai didi

python - MySQL :"Access denied to x@localhost' 使用 python

转载 作者:行者123 更新时间:2023-11-29 17:34:47 25 4
gpt4 key购买 nike

我尝试使用 python 连接 MySQL。它在 WorkBench MySQL 中连接。然后在cmd中,我也尝试连接(如下所示)。效果很好!

mysql -u MyNewPass

但是,当我运行 python 代码时:

db = MySQLdb.connect(host = "127.0.0.1", user="root", passwd="MyNewPass", db="test", port=3306)

它显示了错误

db = MySQLdb.connect(host = "127.0.0.1", user="root", passwd="MyNewPass", db="test", port=3306)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/site-packages/MySQLdb/__init__.py", line 74, in Connect
return Connection(*args, **kwargs)
File "/usr/lib/python2.7/site-packages/MySQLdb/connections.py", line 170, in __init__
super(Connection, self).__init__(*args, **kwargs2)
_mysql_exceptions.OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: YES)")

有人可以帮我解决这个问题吗?谢谢

最佳答案

在 MySQL 中,用户由用户名('root')和用户连接的主机来标识。

在 Linux 上的 MySQL 中,主机名“localhost”很特殊,它指定通过本地套接字的连接,而不是 TCP/IP 连接。

看起来 DNS 主机名解析已启用(未为 MySQL 服务器指定 --skip-name-resolve 选项)

看起来 MySQL 服务器看到来自 IP 地址 127.0.0.1 的连接,然后进行反向查找,找到主机名“localhost”,然后查找匹配的用户“root”@“localhost”。

(这个解释对我来说似乎有点奇怪,但我对此行为没有任何其他解释,因为 Python 连接指定 MySQL 服务器 IP 地址为 127.0.0.1,并且错误消息报告“root”@ “本地主机”。)

<小时/>

一些建议:

尝试强制 TCP/IP 连接而不是本地套接字连接。对于 MySQL 命令行客户端,我们将指定 --protocol=TCP 例如

mysql ... --protocol=TCP ...

我不确定 Python 连接器的确切语法,但我预计它会非常相似。

或者,尝试指定主机名“localhost”以使用本地套接字连接。

检查 mysql.user 表的内容,查找以“root”作为用户名的用户

SELECT user, host, password FROM mysql.user WHERE user = 'root' 

请注意,“root”@“%”的密码可以与“root”@“localhost”不同,因为它们是不同的用户。

<小时/>

真正令人困惑的是,该连接似乎提供了 IP 地址 127.0.0.1 作为目标主机,并且似乎应该强制建立 TCP 连接。但 MySQL 似乎报告尝试使用 unix 套接字连接时出错。

所报告的行为非常奇怪。我不确定 Python 连接器发生了什么导致 127.0.0.1 被解释为本地主机套接字连接。

以下是对预期行为的引用:

https://dev.mysql.com/doc/refman/5.7/en/connecting.html

On Unix, MySQL programs treat the host name localhost specially, in a way that is likely different from what you expect compared to other network-based programs. For connections to localhost, MySQL programs attempt to connect to the local server by using a Unix socket file. This occurs even if a --port or -P option is given to specify a port number. To ensure that the client makes a TCP/IP connection to the local server, use --host or -h to specify a host name value of 127.0.0.1, or the IP address or name of the local server. You can also specify the connection protocol explicitly, even for localhost, by using the --protocol=TCP option.

关于python - MySQL :"Access denied to x@localhost' 使用 python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50379764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com