2009-11-24 10 views
5

Ha habido preguntas similares en StackOverflow sobre esto, pero no he encontrado la misma situación. Esto es en una máquina OS X Leopard usando MySQLWeird MySQL Python mod_wsgi No se puede conectar al servidor MySQL en 'localhost' (49) problema

Parte de la información de partida:

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

mysqladmin también ha skip-networking aparece como OFF

soy capaz de conectar a MySQL desde la línea de comandos de Python . Pero cuando trato de hacerlo a través de mod_wsgi utilizando código que es copiar y pegar o por medio de Django recibo el rechazo de la conexión genérica

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

He mirado en el manual de MySQL y trató sus sugerencias para solucionar problemas tales como

telnet localhost 3306 

y I do obtener una conexión.

Soy no tratando de conectarme como root, tampoco.

¿Alguna idea sobre qué más podría comprobar? ¡Gracias de antemano!

Respuesta

0

No hay mucho por ahí en esto. Sólo una conjetura al azar, sino tratar de usar:

DATABASE_HOST = 'localhost' en lugar de 127.0.0.1

y/o tratar comentando en su my.ini:

bind-dirección 127.0.0.1

vale la pena una oportunidad.

0

Resulta extraño que la conexión telnet funcione. Tal vez algunas formas más de solucionar el problema:

shell> perror 49 
OS error code 49: Can't assign requested address 

Verificaría primero la interfaz del host local, verifica si tiene una dirección IPv4. Lejos de lo posible, pero tuve problemas cuando dudé IPv6.

shell> ifconfig lo0 

Tal vez la resolución de nombres no funciona correctamente desde el interior de Apache/mod_wsgi/etc ..

import python 
print socket.gethostbyname('localhost') 
print socket.gethostbyaddr('127.0.0.1') 

Tal vez para que te va (algo he contribuido a Django) tratar el socket UNIX en Django , funciona configurando el host de base de datos a la trayectoria (empezar con barra diagonal):

DATABASE_HOST = '/tmp/mysql.sock' 

O donde quiera que su archivo socket.

Por último, verifique el registro de errores de MySQL si hay algún mensaje extraño, como por ejemplo no vincular la dirección IP o el puerto.

Espero que esto ayude un poco.

10

Me encontré con este error y fue debido a una denegación de SELinux./ Usr/bin/httpd no tiene permiso para conectarse al puerto 3306. Me corregido el problema con:

setsebool httpd_can_network_connect_db on 

parece funcionar muy bien y debería ser más seguro que simplemente deshabilitar SELinux. Como Avinash Meetoo señala a continuación, puede utilizar:

setsebool -P httpd_can_network_connect_db 

para hacer el cambio selinux persistir en los reinicios.

+1

Muchas gracias. Estoy usando MySQL en CentOS Linux 6 con SELinux ejecutándose en modo Enforcing. El setsebool resolvió el problema perfectamente. –

+0

'setsebool -P httpd_can_network_connect_db on' es aún mejor ya que es persistente. Sin '-P', el setsebool no persiste durante los reinicios. –

1

que estaba recibiendo el mismo mensaje de error exacto en Django:

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

solucionarlo, tuve que establecer explícitamente el puerto de MySQL a 3306 en el archivo de configuración de Django.

Cuestiones relacionadas