Клиент MySQL Python получил 1045 (28000): доступ запрещен для пользователя 'root' @ 'localhost' - PullRequest
0 голосов
/ 14 октября 2019

Эта ошибка происходит как с pymysql, так и с mysql-connector-python. Но не для оболочки MySQL. Оболочка MySQL может войти через 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 OSX10,14. MySQL версия 8.0.16.

1 Ответ

1 голос
/ 14 октября 2019

Я искал все ответы на сайте. Не нашел исправления, поэтому хочу документировать это решение, чтобы помочь другим людям, сталкивающимся с подобной ситуацией.

Виновник прекращения работы 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 ошибка исчезла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...