python - remote - error 2003(hy000): can''t connect to mysql server on
PyMySQL no puede conectarse a MySQL en localhost (4)
Dos conjeturas:
Ejecutar
mysqladmin variables | grep socketmysqladmin variables | grep socketpara llegar a donde se encuentra el socket, e intente configurar una conexión como esta:pymysql.connect(db=''base'', user=''root'', passwd=''pwd'', unix_socket="/tmp/mysql.sock")Ejecutar
mysqladmin variables | grep portmysqladmin variables | grep porty verifique que el puerto sea 3306. De lo contrario, puede configurar el puerto manualmente de la siguiente manera:pymysql.connect(db=''base'', user=''root'', passwd=''pwd'', host=''localhost'', port=XXXX)
Estoy tratando de conectarme a MySQL en localhost usando PyMySQL:
import pymysql
conn = pymysql.connect(db=''base'', user=''root'', passwd=''pwd'', host=''localhost'')
pero (ambos en Python 2.7 y Python 3.2) me sale el error:
socket.error: [Errno 111] Conexión rechazada
pymysql.err.OperationalError: (2003, "No se puede conectar al servidor MySQL en ''localhost'' (111)")
Estoy seguro de que mysqld se está ejecutando porque puedo conectarme con el comando mysql o phpMyAdmin. Además, puedo conectarme 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 idea de cómo resolverlo.
Es necesario agregar el puerto a la conexión también. Intenta esto y funciona bien.
pymysql(Module Name).connect(host="localhost", user="root", passwd="root", port=8889, db="db_name")
Parece que cambiar localhost a 127.0.0.1 corrige el error, al menos en mi configuración. Si no es así, buscaría errores en la tcp sockets connection y, por supuesto, lo publicaría como un error en pymysql bugtrack.
Resolví el problema reemplazando localhost con 127.0.0.1 y cambiando la contraseña a mi contraseña de 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''
)