我有一个像这样的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 -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;
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用户来连接
root
con = MySQLdb.connect(host = 'localhost',user = 'root',passwd = 'my_root_password', db = 'real_estate_analytics')
但它也不起作用(相同的错误)。
这件事使我发疯。有人对问题可能有什么见解吗?
OBS:我知道在SO上也有类似的问题,但是我已经阅读了全部,但并不能解决我的问题。这就是为什么我在这里发布
‘localhost’一直是MySQL的特色。在您的情况下,您为crawler @ localhost授予了一些特权,这意味着“通过UNIX套接字连接的用户搜寻器”。而且,我很确定MySQL服务器已配置--skip- networking。
可以通过明确来解决此问题。使用数据库驱动程序的unix_socket连接参数,将强制使用UNIX套接字。(无耻地链接到MySQL Connector / Python文档,因为我是该驱动程序的维护者)。