MySQL Python 客户端得到 1045 (28000):用户 'root'@'localhost' 的访问被拒绝
MySQL Python client got 1045 (28000): Access denied for user 'root'@'localhost'
pymysql
和 mysql-connector-python
都会出现此错误。但不是到MySQLshell。 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.
我搜索了网站上的所有答案。没有找到修复,因此想记录这个解决方案以帮助其他人 运行 遇到类似情况。
pymysql
停止工作的罪魁祸首应该是升级到 MySQL 8。 MySQL 8 比以前的 5.7 具有更强的密码验证。从 8 降级到 5.7 是我不想经历的很多痛苦。通过编辑 my.cnf
恢复到旧版身份验证的简单尝试失败了。
然后我看了这篇博客:https://blog.csdn.net/zoe9698/article/details/78171465(中文的)
基本上是说用户不应该 root
。 Python 连接被视为 "remote",因此禁止记录为 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
,错误消失
pymysql
和 mysql-connector-python
都会出现此错误。但不是到MySQLshell。 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.
我搜索了网站上的所有答案。没有找到修复,因此想记录这个解决方案以帮助其他人 运行 遇到类似情况。
pymysql
停止工作的罪魁祸首应该是升级到 MySQL 8。 MySQL 8 比以前的 5.7 具有更强的密码验证。从 8 降级到 5.7 是我不想经历的很多痛苦。通过编辑 my.cnf
恢复到旧版身份验证的简单尝试失败了。
然后我看了这篇博客:https://blog.csdn.net/zoe9698/article/details/78171465(中文的)
基本上是说用户不应该 root
。 Python 连接被视为 "remote",因此禁止记录为 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
,错误消失