Странный 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-адресом или портом.
Надеюсь это немного поможет.