Python MySQLdb-ошибка 1045: доступ запрещен для пользователя


У меня есть код python, который выглядит так:

import MySQLdb
import sys

try:
    con = MySQLdb.connect(host = 'localhost',user = 'crawler',passwd = 'crawler', db = 'real_estate_analytics')

    #... rest of code ...

except MySQLdb.Error, e:

    print "Error %d: %s" % (e.args[0],e.args[1])
    sys.exit(1)

Проблема в том, что я получаю следующую ошибку:

Error 1045: Access denied for user 'crawler'@'localhost' (using password: YES)

Если я mysql на терминале mysql -u crawler -pcrawler, я могу получить доступ к базам данных без проблем.

mysql> show databases;
+-----------------------+
| Database              |
+-----------------------+
| information_schema    |
| AL                    |
| cloversoup            |
| codebar               |
| mysql                 |
| performance_schema    |
| real_estate_analytics |
| teste                 |
+-----------------------+
8 rows in set (0.00 sec)

Я также удалил анонимного пользователя, чтобы избежать конфликтов. Мои пользователи

mysql> select user,host from mysql.user;
+---------+-----------+
| user    | host      |
+---------+-----------+
| root    | %         |
| crawler | localhost |
| root    | localhost |
+---------+-----------+
3 rows in set (0.00 sec)

Я дал все гранты crawler (и привилегии flushed), так что это не должно быть проблемой:

GRANT ALL PRIVILEGES ON *.* TO crawler@localhost IDENTIFIED BY 'crawler' WITH GRANT OPTION;

FLUSH PRIVILEGES;

В качестве дело в том, что:

mysql> show grants;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for crawler@localhost                                                                                                              |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'crawler'@'localhost' IDENTIFIED BY PASSWORD '*A594DECC46D378FDA13D7843740CBF4985E6969B' WITH GRANT OPTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

Я также попытался подключиться с помощью пользователя root, выполнив

con = MySQLdb.connect(host = 'localhost',user = 'root',passwd = 'my_root_password', db = 'real_estate_analytics')

Но это тоже не работает (та же ошибка).

Эта штука сводит меня с ума. Есть ли у кого-нибудь представление о том, в чем может быть проблема?

OBS: я знаю, что есть подобные вопросы на SO, но я прочитал их все, и это не решило мою проблему. Вот почему я публикую его здесь

1 7

1 ответ:

'localhost' является и всегда был специальным для MySQL . В вашем случае вы предоставляете crawler@localhost некоторые привилегии, и это будет означать "пользовательское соединение crawler через сокет UNIX". И я уверен, что сервер MySQL настроен с --skip-networking .

Это можно исправить, будучи явным. Используя аргумент unix_socket connection драйвера базы данных, он принудительно использует сокет UNIX. (Бесстыдно связываясь с MySQL Connector / Python docs, поскольку я сопровождаю этот драйвер).