Cuando intenté conectarme a un servidor MySQL local durante mi paquete de prueba, falla con el error:
OperationalError: (2002, "Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)")
Sin embargo, en todo momento puedo conectarme a MySQL ejecutando el mysql
programa de línea de comando
. A ps aux | grep mysql
muestra que el servidor se está ejecutando y
stat /tmp/mysql.sock
confirma que el socket existe. Además, si abro un depurador en la except
cláusula de esa excepción, puedo conectarme de manera confiable con los mismos parámetros exactos.
Este problema se reproduce de manera bastante confiable, sin embargo, no parece ser 100%, porque de vez en cuando en una luna azul, mi suite de prueba realmente se ejecuta sin detectar este error. Cuando intenté correr con sudo dtruss
él no se reprodujo.
Todo el código del cliente está en Python, aunque no puedo entender cómo eso sería relevante.
El cambio para usar el host 127.0.0.1
produce el error:
DatabaseError: Can't connect to MySQL server on '127.0.0.1' (61)
max_connections
su archivo de configuración de MySQL?mysql -h 127.0.0.1
el trabajo de la línea de comandos? No estoy tan seguro de que su servidor mysql realmente esté escuchando en un puerto TCP.mysql -h localhost
funciona de manera confiable?Respuestas:
Esto funcionó para mí. Sin embargo, si esto no funciona, asegúrese de que mysqld se esté ejecutando e intente conectarse.
fuente
La sección relevante del manual de MySQL está aquí . Comenzaría por seguir los pasos de depuración que se enumeran allí.
Además, recuerde que localhost y 127.0.0.1 no son lo mismo en este contexto:
localhost
, se usa un socket o una tubería.127.0.0.1
, el cliente se ve obligado a usar TCP / IP.Entonces, por ejemplo, puede verificar si su base de datos está escuchando conexiones TCP vi
netstat -nlp
. Parece probable que ESTÉ escuchando conexiones TCP porque dices quemysql -h 127.0.0.1
funciona bien. Para verificar si puede conectarse a su base de datos mediante sockets, usemysql -h localhost
.Si nada de esto ayuda, entonces probablemente necesite publicar más detalles sobre su configuración de MySQL, exactamente cómo está instanciando la conexión, etc.
fuente
localhost
como host). Cambiando para127.0.0.1
arreglarlo.Para mí, el problema era que no estaba ejecutando el servidor mysql. Ejecute primero el servidor y luego ejecútelo
mysql
.fuente
He visto que esto sucede en mi tienda cuando mis desarrolladores tienen instalado un administrador de pila como MAMP que viene preconfigurado con MySQL instalado en un lugar no estándar.
en su terminal
eso le dará su ruta al archivo de calcetines. toma ese camino y úsalo en tu paramater de BASE DE DATOS.
Lo que debe hacer es señalar su
NOTA
también se ejecuta
which mysql_config
si de alguna manera tiene instancias múltiples de servidor mysql instaladas en la máquina, puede estar conectándose a la incorrecta.fuente
Acabo de cambiar
HOST
delocalhost
a127.0.0.1
y funciona bien:fuente
settings.py
del proyecto.Cuando, si pierde su demonio mysql en mac OSx pero está presente en otra ruta por ejemplo en privado / var, haga el siguiente comando
1)
2) reinicie su conexión a mysql con:
trabaja también para mariadb
fuente
Ejecute el cmd a continuación en la terminal
Luego reinicie la máquina para que surta efecto. ¡¡Funciona!!
fuente
Verifique el número de archivos abiertos para el proceso mysql usando el comando lsof.
Aumente el límite de archivos abiertos y vuelva a ejecutar.
fuente
ulimit
aumentar la cantidad de archivos abiertos que su cliente y servidor pueden abrir. si tiene una versión reciente de ubuntu, esto puede requerir editar el script de inicio mysql en / etc / init, pero espero que pueda hacerlo en el archivo .cnf.Después de intentar algunas de estas soluciones y no tener éxito, esto es lo que funcionó para mí:
fuente
Este puede ser uno de los siguientes problemas.
y luego póngalo en su código de conexión db:
/tmp/mysql.sock es el devuelto por grep
2. Solución incorrecta de puerto mysql: debe encontrar el puerto mysql correcto:
y luego en tu código:
3306 es el puerto devuelto por grep
Creo que la primera opción resolverá tu problema.
fuente
Para aquellos que actualizaron de 5.7 a 8.0 a través de homebrew, este error probablemente se deba a que la actualización no se completó. En mi caso,
mysql.server start
me dio el siguiente error:Luego revisé el archivo de registro a través de
cat /usr/local/var/mysql/YOURS.err | tail -n 50
y encontré lo siguiente:Si está en el mismo barco, primero instale a
[email protected]
través de homebrew, detenga el servidor y luego vuelva a iniciar el sistema 8.0.Luego,
Esto haría que su MySQL (8.0) vuelva a funcionar.
fuente
ERROR! The server quit without updating PID file
otra vez.Creo que vi este mismo comportamiento hace algún tiempo, pero no puedo recordar los detalles.
En nuestro caso, el problema fue el momento en que el testrunner inicializa las conexiones de la base de datos en relación con la primera interacción de la base de datos requerida, por ejemplo, mediante la importación de un módulo en settings.py o algún __init__.py. Trataré de obtener más información, pero esto ya puede sonar una campana para su caso.
fuente
Asegúrate de que tu / etc / hosts tenga
127.0.0.1 localhost
y debería funcionar bienfuente
Tengo dos conjeturas furtivas sobre este
CONJECTURA # 1
Analice la posibilidad de no poder acceder al
/tmp/mysql.sock
archivo. Cuando configuro bases de datos MySQL, normalmente dejo entrar el sitio del archivo socket/var/lib/mysql
. Si inicia sesión en mysql comoroot@localhost
, su sesión de sistema operativo necesita acceso a la/tmp
carpeta. Asegúrese de/tmp
tener los derechos de acceso correctos en el sistema operativo. Además, asegúrese de que el usuario de sudo siempre pueda leer el archivo/tmp
.CONJECTURA # 2
Acceder a mysql a través de
127.0.0.1
puede causar cierta confusión si no está prestando atención. ¿Cómo?Desde la línea de comandos, si se conecta a MySQL con
127.0.0.1
, es posible que deba especificar el protocolo TCP / IP.o prueba el nombre DNS
Esto evitará iniciar sesión como
root@localhost
, pero asegúrese de haberloroot@'127.0.0.1'
definido.La próxima vez que se conecte a MySQL, ejecute esto:
¿Qué te da esto?
Si estas funciones regresan con los mismos valores, entonces se está conectando y autenticando como se esperaba. Si los valores son diferentes, es posible que deba crear el usuario correspondiente
[email protected]
.fuente
Tuve este mismo problema. Resultó
mysqld
había dejado de funcionar (estoy en Mac OSX). Lo reinicié y el error desapareció.Me di cuenta de que
mysqld
no funcionaba en gran medida debido a este enlace: http://dev.mysql.com/doc/refman/5.6/en/can-not-connect-to-server.html¡Note el primer consejo!
fuente
Si obtiene un error como el siguiente:
Luego, busque la ubicación de su archivo mysqld.sock y agréguelo a "HOST".
Como si estuviera usando xampp en Linux, mi
mysqld.sock
archivo está en otra ubicación. entonces no está funcionando para '/var/run/mysqld/mysqld.sock
'fuente
Verifique que su mysql no haya alcanzado las conexiones máximas o que no esté en algún tipo de ciclo de arranque, como sucede con frecuencia si la configuración es incorrecta en my.cnf.
Utilice ps aux | grep mysql para verificar si el PID está cambiando.
fuente
Miré en línea demasiado tiempo para no contribuir. Después de intentar escribir el indicador mysql desde la línea de comandos, seguía recibiendo este mensaje:
ERROR 2002 (HY000): No se puede conectar al servidor MySQL local a través del socket '/tmp/mysql.sock' (2)
Esto se debió al hecho de que mi servidor mysql local ya no se estaba ejecutando. Para reiniciar el servidor, navegué a
donde estaba ubicado mi mysql.server. Desde aquí, simplemente escriba:
Esto relanzará el servidor mysql local.
Desde allí puede restablecer la contraseña de root si es necesario.
fuente
Tuve que matar todas las instancias de mysql al encontrar primero todas las ID de proceso:
Y luego matarlos:
Luego:
Trabajó para mi.
fuente
El zócalo se encuentra en / tmp. En el sistema Unix, debido a los modos y propiedades en / tmp, esto podría causar algún problema. Pero, siempre y cuando nos diga que PUEDE usar su conexión mysql normalmente, supongo que no es un problema en su sistema. Una comprobación primaria debe ser la reubicación de mysql.sock en un directorio más neutral.
El hecho de que el problema ocurra "al azar" (o no cada vez) me permite pensar que podría ser un problema del servidor.
¿Está su / tmp ubicado en un disco estándar o en una montura exótica (como en la RAM)?
¿Está / tmp vacío?
¿
iotop
Le muestra algo mal cuando encuentra el problema?fuente
Configure su conexión de base de datos en el cuadro de diálogo 'Administrar conexiones de base de datos. Seleccione 'Estándar (TCP / IP)' como método de conexión.
Consulte esta página para obtener más detalles http://dev.mysql.com/doc/workbench/en/wb-manage-db-connections.html
De acuerdo con esta otra página , se utiliza un archivo de socket incluso si especifica localhost.
También muestra cómo verificar su servidor ejecutando estos comandos:
fuente
en ubuntu14.04 puede hacer esto para resolver este problema.
fuente
Para mí, estoy seguro de que mysqld se inició y la línea de comandos mysql puede funcionar correctamente. Pero el servidor httpd muestra el problema (no se puede conectar a mysql a través del socket).
Inicié el servicio con mysqld_safe &.
Finalmente, descubrí que cuando inicio el servicio mysqld con el servicio mysqld start, hay problemas (problema de permiso de selinux), y cuando soluciono el problema de selinux e inicio mysqld con "service mysqld start", el problema de conexión httpd desaparece. Pero cuando inicio mysqld con mysqld_safe &, mysqld puede funcionar. (El cliente mysql puede funcionar correctamente). Pero todavía hay problemas al conectarse con httpd.
fuente
Si está relacionado con el socket, lea este archivo
y vea cuál es la ubicación estándar del zócalo. Es una línea como:
ahora crea un alias para tu shell como:
De esta manera no necesita privilegios de root.
fuente
Simplemente intenta correr
mysqld
.Esto era lo que no me funcionaba en Mac. Si no funciona, vaya
/usr/local/var/mysql/<your_name>.err
a ver registros de errores detallados.fuente
Puede ser de ayuda.
fuente
Usando MacOS Mojave 10.14.6 para MySQL 8.0.19 instalado a través de Homebrew
sudo find / -name my.cnf
/usr/local/etc/my.cnf
Trabajó por un tiempo y luego finalmente el error regresó. Desinstalé la versión Homebrew de MySQL e instalé el archivo .dmg directamente desde aquí
Felizmente conectando desde entonces.
fuente
En mi caso, lo que ayudó fue editar el archivo
/etc/mysql/mysql.conf.d/mysqld.cnf
y reemplazar la línea:con
Luego reinicié el servidor y funcionó bien. Lo curioso es que si volvía a poner la línea como estaba antes y la reiniciaba, todavía funcionaba ...
fuente
Me había enfrentado a un problema similar recientemente. Pasé por muchas respuestas. Lo conseguí trabajando siguiendo los pasos.
fuente
Para mí, el servidor mysql no se estaba ejecutando. Entonces, comencé el servidor mysql a través de
luego
mysql_secure_installation
para asegurar el servidor y ahora puedo visitar el servidor MySQL a través de
sudo mysql -uroot -p
fuente