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 【问题描述】:pymysql
和 mysql-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'的访问被拒绝的主要内容,如果未能解决你的问题,请参考以下文章
python3连接Mysql时报错1045 using password : NO
springboot 连接mysql 报 java.sql.SQLException: Unknown error 1045