怪异的MySQL Python mod#u wsgi Can';t连接到';本地主机';(49)问题

怪异的MySQL Python mod#u wsgi Can';t连接到';本地主机';(49)问题,python,mysql,django,mod-wsgi,mysql-error-2003,Python,Mysql,Django,Mod Wsgi,Mysql Error 2003,关于StackOverflow也有类似的问题,但我没有发现完全相同的情况。这是在使用MySQL的OSXLeopard机器上实现的 一些起始信息: MySQL Server version 5.1.30 Apache/2.2.13 (Unix) Python 2.5.1 mod_wsgi 3 mysqladmin还将跳过网络列为关闭 我能够从python命令行连接到mysql。但是,当我试图通过mod_wsgi使用复制和粘贴的代码或者通过Django来实现时,我收到了通用连接拒绝

关于StackOverflow也有类似的问题,但我没有发现完全相同的情况。这是在使用MySQL的OSXLeopard机器上实现的

一些起始信息:

MySQL Server version        5.1.30
Apache/2.2.13 (Unix)
Python 2.5.1
mod_wsgi 3
mysqladmin还将跳过网络列为关闭

我能够从python命令行连接到mysql。但是,当我试图通过mod_wsgi使用复制和粘贴的代码或者通过Django来实现时,我收到了通用连接拒绝

OperationalError: (2003, "Can't connect to MySQL server on 'localhost' (49)")
我已经阅读了mysql手册,并尝试了其故障排除技巧,如

telnet localhost 3306
而我也确实得到了联系

我也不是试图以root身份连接

还有什么我可以查的吗?
提前谢谢

这方面没有太多问题。只是一个随机猜测,但请尝试使用:

数据库\主机='localhost' 而不是127.0.0.1

和/或尝试在my.ini中发表评论:

绑定地址127.0.0.1


值得一试。

telnet连接工作起来有点奇怪。也许还有一些解决问题的方法:

shell> perror 49
OS error code  49:  Can't assign requested address
我会先检查localhost接口,检查它是否有IPv4地址。也许有些牵强,但我在启用IPv6时遇到了一些麻烦

shell> ifconfig lo0
可能名称解析在Apache/mod_wsgi/etc中无法正常工作

import python
print socket.gethostbyname('localhost')
print socket.gethostbyaddr('127.0.0.1')
也许为了让您继续(我为Django做了一些贡献)尝试Django中的UNIX套接字,它可以将数据库主机设置为路径(从正斜杠开始):

或者你的套接字文件在哪里

最后,检查MySQL错误日志是否有任何奇怪的消息,比如无法绑定IP地址或端口


希望这能有所帮助。

我遇到了这个错误,这是由于SELinux拒绝/usr/bin/httpd没有连接端口3306的权限。我通过以下方式更正了该问题:

setsebool httpd_can_network_connect_db on
似乎工作得很好,应该比禁用SELinux更安全。正如Avinash Meetoo在下面指出的,您可以使用:

setsebool -P httpd_can_network_connect_db

使selinux更改在重新启动期间保持不变。

我在Django中收到了完全相同的错误消息:

OperationalError: (2003, "Can't connect to MySQL server on 'localhost' (49)")

为了修复它,我必须在django设置文件中将mysql端口显式设置为3306。

非常感谢。我在CentOS Linux 6上使用MySQL,SELinux以强制模式运行。setsebool完美地解决了这个问题。
setsebool-P httpd_can_network_connect_db on
甚至更好,因为它是持久的。如果没有
-P
,则setsebool不会在重新启动期间保持不变。
OperationalError: (2003, "Can't connect to MySQL server on 'localhost' (49)")