Странный MySQL Python mod_wsgi Не удается подключиться к серверу MySQL из-за проблемы "localhost" (49)

По этому поводу на Stackru были похожие вопросы, но я не нашел такой же ситуации. Это на машине OS X Leopard, использующей MySQL

Некоторая стартовая информация:

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

mysqladmin также имеет пропущенную сеть, отмеченную как OFF

Я могу подключиться к MySQL из командной строки Python. Но когда я пытаюсь сделать это через mod_wsgi, используя скопированный и вставленный код или через Django, я получаю отказ от общего подключения

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

Я посмотрел руководство по mysql и попробовал его советы по устранению неполадок, такие как

telnet localhost 3306

и я получаю связь.

Я тоже не пытаюсь подключиться как root.

Любые идеи о том, что еще я мог проверить? Заранее спасибо!

4 ответа

Я сталкивался с этой ошибкой, и это было из-за отказа 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)")

Чтобы это исправить, мне пришлось явно установить порт mysql на 3306 в файле настроек django.

Не слишком много на этом. Просто случайное предположение, но попробуйте использовать:

DATABASE_HOST = 'localhost' вместо 127.0.0.1

и / или попробуйте комментировать в своем my.ini:

bind-адрес 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), попробуйте UNIX Socket в Django, он работает, устанавливая путь к хосту базы данных (начните с forward-slash):

DATABASE_HOST = '/tmp/mysql.sock'

Или где-нибудь ваш файл сокета.

Наконец, проверьте журнал ошибок MySQL, если есть какие-то странные сообщения, например, он не может связываться с IP-адресом или портом.

Надеюсь это немного поможет.

Другие вопросы по тегам