Python MySQLdb - 错误 1045 : Access denied for user

标签 python mysql mysql-python

我有一个类似的 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)

问题是我收到以下错误:

错误 1045:用户 'crawler'@'localhost' 的访问被拒绝(使用密码: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)

我已将所有授权授予爬虫(和刷新权限),所以这不应该是问题所在:

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

刷新权限;

事实上:

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上也有类似的问题,但我已经全部阅读了,并没有解决我的问题。这就是为什么我在这里张贴它

最佳答案

'localhost' 是并且有 always been special with MySQL .在您的情况下,您授予 crawler@localhost 一些特权,这意味着“用户爬虫通过 UNIX 套接字连接”。而且,我很确定 MySQL 服务器配置了 --skip-networking .

这可以通过显式来解决。使用 unix_socket connection argument你的数据库驱动程序,它会强制使用 UNIX 套接字。 (无耻地链接到 MySQL 连接器/Python 文档,因为我是该驱动程序的维护者)。

关于Python MySQLdb - 错误 1045 : Access denied for user,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22267114/

相关文章:

php - 如何在mysql中解密密码

mysql - 使用 python 2.7 和 MySQLdb 的动态 LIKE 查询

python - 如何在python中使用MySQLdb创建多个mysql表?

python - 将 INSERT SQL 语句的无效值更改为 None 但出现 "Data Truncated"错误

python - 如何在 python 中转义包含单引号、双引号 (',",`) 等所有字符的 Linux 命令?

python - pretty-print 整个 Pandas Series/DataFrame

python - 对两组中的每个元素进行成对比较,并返回前 3 名的排名列表

python - 使用 Python 在 XML 中查找和替换值

mysql :Exclude row that does not satisfy the condition list

php - 如何将当前时间戳插入数据库?