MySQL Python客户端得到1045(28000):用户'root'@'localhost'的访问被拒绝

Posted

技术标签:

【中文标题】MySQL Python客户端得到1045(28000):用户\'root\'@\'localhost\'的访问被拒绝【英文标题】:MySQL Python client got 1045 (28000): Access denied for user 'root'@'localhost'MySQL Python客户端得到1045(28000):用户'root'@'localhost'的访问被拒绝 【发布时间】:2020-02-10 15:41:31 【问题描述】:

pymysqlmysql-connector-python 都会发生此错误。但不是 MySQL shell。 MySQL shell 可以正常通过mysql -u root -p 登录。

错误看起来像:

In [1]: import mysql.connector

In [2]: mydb = mysql.connector.connect(
   ...:   host="localhost",
   ...:   user="root",
   ...:   passwd="password"
   ...: )

ProgrammingError: 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

或者

In [8]: import pymysql.cursors

In [9]: connection = pymysql.connect(host='localhost',
   ...:                              user='root',
   ...:                              password='password',
   ...:                              db='db',
   ...:                              cursorclass=pymysql.cursors.DictCursor)

...
OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: YES)")

Python 3.7 版,在 Mac OSX 10.14 上运行。 MySQL 版本 8.0.16。

【问题讨论】:

【参考方案1】:

我搜索了网站上的所有答案。没有找到解决方法,因此想记录这个解决方案以帮助遇到类似情况的其他人。

pymysql停止工作的罪魁祸首应该是升级到MySQL 8。MySQL 8的密码认证比之前的5.7强。从 8 降级到 5.7 是我不想经历的很多痛苦。通过编辑my.cnf 恢复到旧式身份验证的简单尝试结果无效。

然后我看了这个博客:https://blog.csdn.net/zoe9698/article/details/78171465(是中文的)。

基本上是说用户不应该是root。 Python 连接被视为“远程”,因此禁止以root 记录。

所以只需创建另一个用户并授予它所有权限。

mysql> CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost';
Query OK, 0 rows affected (0.00 sec)

将代码中的root替换为user,错误就消失了。

【讨论】:

我遇到了同样的问题并尝试了您的解决方案,但它对我不起作用......如果我找到了一些东西,我会在这里发布

以上是关于MySQL Python客户端得到1045(28000):用户'root'@'localhost'的访问被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

MySQL - 错误 1045 - 访问被拒绝

python3连接Mysql时报错1045 using password : NO

关于使用$作为mysql的密码报错1045

mysql数据库报错1045

#1045 无法登录 MySQL 服务器

springboot 连接mysql 报 java.sql.SQLException: Unknown error 1045