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

时间:2019-10-14 03:00:44

标签: python mysql pymysql

pymysqlmysql-connector-python均发生此错误。但不是MySQL外壳程序。 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 个答案:

答案 0 :(得分:1)

我搜索了网站上的所有答案。找不到修复程序,因此希望记录此解决方案以帮助遇到类似情况的其他人。

pymysql停止工作的罪魁祸首应该升级到MySQL8。MySQL8具有比以前的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,错误消失了。