2011-07-30 66 views
23

Estoy tratando de conectar a MySQL en el servidor local usando PyMySQL:PyMySQL no se puede conectar a MySQL en el servidor local

import pymysql 
conn = pymysql.connect(db='base', user='root', passwd='pwd', host='localhost') 

pero (tanto en Python 2.7 y Python 3.2) me sale el error:

socket.error: [Errno 111] Connection refused

pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on 'localhost' (111)")

estoy seguro mysqld se está ejecutando porque se puede conectar utilizando comandos mysql o phpMyAdmin. Por otra parte, puedo conectar usando MySQLdb en Python 2 con casi el mismo código:

import MySQLdb 
conn = MySQLdb.connect(db='base', user='root', passwd='pwd', host='localhost') 

Parece que el problema está en el lado PyMySQL en lugar de MySQL pero no tengo ni idea de cómo solucionarlo.

+1

tratar de usar host = "yourIpAddress" en lugar de localhost, que parece ser un problema conf – Hassek

Respuesta

37

dos conjeturas:

  1. Run mysqladmin variables | grep socket para llegar a donde se encuentra la toma de corriente, y tratar de establecer una conexión de este modo:

    pymysql.connect(db='base', user='root', passwd='pwd', unix_socket="/tmp/mysql.sock") 
    
  2. Run mysqladmin variables | grep port y verificar que el puerto es 3306 Si no, puede configurar el puerto manualmente así:

    pymysql.connect(db='base', user='root', passwd='pwd', host='localhost', port=XXXX) 
    
+2

Usando '/ var/run/mysqld/mysqld.sock' hizo el truco. ¡Gracias! (Bounty en 21 horas) – Ryan

+2

Sin embargo, es un poco raro que sea necesario. Me pregunto si su archivo 'my.cnf' no está configurado correctamente. Supongo que el puerto no está configurado correctamente, y MySQLdb es lo suficientemente inteligente como para tratar de usar el socket en lugar de TCP. (Algunos debates [aquí] (http://dev.mysql.com/doc/refman/5.5/en//connecting.html) donde hablan sobre '--protocol') – RecursivelyIronic

+1

No tengo un' my archivo .cnf' - pero PHP parece ser capaz de descubrir que 'localhost' debería convertirse en eso. Me gusta usar '.sock's mejor, aunque :) – Ryan

5

Parece que cambiar localhost a 127.0.0.1 soluciona el error, al menos en mi configuración. Si no es así, buscaría errores en tcp sockets connection y, por supuesto, lo publicaría como un error en pymysql bugtrack.

+2

traté de usar '127.0.0.1' o mi nombre de host en lugar pero los resultados son los mismos ... –

+2

Este didn 'T arreglarlo para mí tampoco. – gozzilli

4

He resuelto el problema reemplazando localhost con 127.0.0.1 y cambiando la contraseña de mi contraseña de la base de datos MYSQL como se muestra a continuación;

conn = pymysql.connect(
    host = '127.0.0.1', 
    port = 3306, 
    user = 'root', 
    passwd = 'XXXXXXXXX', 
    db = 'mysql' 
) 
0

También debe agregar el puerto a la conexión. Prueba esto y funciona bien.

pymysql(Module Name).connect(host="localhost", user="root", passwd="root", port=8889, db="db_name") 
+2

¡Bienvenido a SO! Antes de responder una pregunta, siempre lea las respuestas existentes. Esta respuesta ya ha sido proporcionada. En lugar de repetir la respuesta, vote la respuesta existente. Algunas pautas para escribir buenas respuestas se pueden encontrar aquí https://stackoverflow.com/help/how-to-answer – LightBender

Cuestiones relacionadas