5

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

一些起始信息:

MySQL Server version        5.1.30
Apache/2.2.13 (Unix)
Python 2.5.1
mod_wsgi 3

mysqladmin 也将 skip-networking 列为 OFF

我可以从 python 命令行连接到 mysql。但是当我尝试通过 mod_wsgi 使用复制和粘贴的代码或通过 Django 执行此操作时,我收到通用连接拒绝

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

我查看了 mysql 手册并尝试了它的故障排除技巧,例如

telnet localhost 3306

确实有联系。

也没有尝试以 root 身份连接。

关于我还能检查什么的任何想法?提前致谢!

4

4 回答 4

13

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

setsebool httpd_can_network_connect_db on

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

setsebool -P httpd_can_network_connect_db

使 selinux 更改在重新启动后持续存在。

于 2011-04-05T12:50:24.437 回答
1

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

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

为了解决这个问题,我必须在 django 设置文件中明确地将 mysql 端口设置为 3306。

于 2012-08-20T00:25:45.980 回答
0

奇怪的是,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 套接字,它可以将数据库主机设置为路径(以正斜杠开头):

DATABASE_HOST = '/tmp/mysql.sock'

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

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

希望这个对你有帮助。

于 2010-01-27T14:24:40.653 回答
0

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

DATABASE_HOST = 'localhost' 而不是 127.0.0.1

和/或尝试在您的 my.ini 中注释掉:

绑定地址 127.0.0.1

值得一试。

于 2009-11-24T23:45:30.487 回答