【问题标题】: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。

【问题讨论】:

    标签: python mysql pymysql


    【解决方案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,错误就消失了。

    【讨论】:

    • 我遇到了同样的问题并尝试了您的解决方案,但它对我不起作用......如果我找到了一些东西,我会在这里发布
    猜你喜欢
    • 2012-08-11
    • 1970-01-01
    • 2017-08-23
    • 2021-04-25
    • 2015-06-03
    • 2019-05-15
    • 2017-11-07
    • 1970-01-01
    相关资源
    最近更新 更多