No se puede conectar al servidor MySQL local a través del socket '/var/lib/mysql/mysql.sock' (2)

255

Recibo el siguiente error cuando intento conectarme a mysql:

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

¿Hay alguna solución para este error? ¿Cuál podría ser la razón detrás de esto?

Atul
fuente
He respondido esto aquí, consulte el siguiente enlace: stackoverflow.com/a/35577309/4773290
Pratik Patil

Respuestas:

222

¿Te estás conectando a "localhost" o "127.0.0.1"? Noté que cuando se conecta a "localhost" se usa el conector de socket, pero cuando se conecta a "127.0.0.1" se usa el conector TCP / IP. Puede intentar usar "127.0.0.1" si el conector del zócalo no está habilitado / funcionando.

Jan Thomä
fuente
27
En ese caso, probablemente debería verificar si su servidor MYSQL se está ejecutando realmente.
Jan Thomä
3
También puede forzar el uso de un socket con el parámetro de socket (-S con / usr / bin / mysql) y forzar TCP / IP proporcionando un puerto (-P con / usr / bin / mysql.)
Kaoru
Usar un nombre de red totalmente calificado que no sea localhost funcionó para mí. Solo asegúrese de que esté declarado en el archivo 'hosts' del lado del cliente.
Fabien Haddadi
2
Nota para los usuarios de cygwin: si el cliente mysql de cygwin intenta conectarse a un servidor mysql WAMP local, por ejemplo, use -h <nombre de host que no sea localhost>. No intente crear un archivo mysql.sock y declararlo en cualquier archivo my.cnf, no funcionará.
Fabien Haddadi
Un nombre de host incorrecto me dio exactamente el mismo error. Mirar el /etc/hostsarchivo en mi contenedor acoplable me mostró el nombre de host de MySql mysql. El uso de este mismo nombre de host en mi configuración de conexión resolvió el problema.
Stephane
188

Asegúrese de que su servicio mysql se esté ejecutando

service mysqld start

Luego, pruebe uno de los siguientes:

(si no ha configurado la contraseña para mysql)

mysql -u root

si ya ha establecido la contraseña

mysql -u root -p
Haja Peer Mohamed H
fuente
55
en versiones más recientes de debian: service mariadb startporque mariadb.org/debian-9-released-mariadb-mysql-variant
Zahra
2
Dale una medalla a ese tipo.
Siraj Alam
Esta fue la respuesta para mí. Como estoy usando mariadb, la solución fue ejecutar lo siguiente: "sudo systemctl start mariadb". Todo estuvo bien después de eso.
mohsen
Dele una medalla a @Zahra
Ahmed C
28

Si su archivo my.cnf (generalmente en la carpeta etc.) está configurado correctamente con

socket=/var/lib/mysql/mysql.sock

puede verificar si mysql se está ejecutando con el siguiente comando:

mysqladmin -u root -p status

intente cambiar su permiso a la carpeta mysql. Si está trabajando localmente, puede intentar:

sudo chmod -R 777 /var/lib/mysql/

eso me resolvió

marimaf
fuente
También funciona para mí, pero después de actualizar a la última versión, aparece este problema, ¿puedo saber por qué sucede esto?
Ben
sudo chmod -R 777 / var / lib / mysql / Trabajó para mí con un problema que tuve al iniciar un contenedor docker mysql
user3152459
23

El servidor MySQL no se está ejecutando, o esa no es la ubicación de su archivo de socket (consulte my.cnf).

Dan Grossman
fuente
Tuve el problema descrito anteriormente y este fue el problema. Gracias.
oshirowanen
3
¿Dónde sería eso para instalar Homebrew?
pal4life
19

Lo más probable mysql.sockes que no exista en /var/lib/mysql/.

Si encuentra el mismo archivo en otra ubicación, entonces enlace simbólico:

Por ejemplo: lo tengo en /data/mysql_datadir/mysql.sock

Cambie el usuario a mysql y ejecútelo como se menciona a continuación:

su mysql

ln -s /data/mysql_datadir/mysql.sock /var/lib/mysql/mysql.sock

Eso resolvió mi problema

sreddy
fuente
renombrar mysql.sock a otra cosa, luego reiniciar mysqld ("service mysqld restart"), luego renombrar otra cosa a mysql.sock funcionó para mí. Una ligera variación en esta respuesta, así que gracias.
Análisis difuso
Esta respuesta puede ayudar a localizar el mysql.sockarchivo
Nobita
15

Si está en un RHEL reciente, es posible que deba iniciar mariadb (un código abierto mysql db) en lugar de mysql db:

yum remove mysql
yum -y install mariadb-server mariadb
service mariadb start

Entonces deberías poder acceder a mysql de la manera habitual:

mysql -u root -p
duhaime
fuente
Para su información, esto también funciona para CentOS 8.1. Después de la instalación mariadb-servery mariadb, no olvide ejecutar mysql_secure_installationpara limpiar algunas configuraciones inseguras predeterminadas.
Dio Phung
13

En mi caso, he movido el archivo de socket a otra ubicación dentro /etc/my.cnf de /var/lib/mysql/mysql.socka/tmp/mysql.sock

Incluso después de reiniciar el servicio mysqld, sigo viendo el mensaje de error cuando intento conectarme. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

El problema está en la forma en que se configura el cliente. La ejecución de los diagnósticos en realidad mostrará la ruta correcta del socket. p.ejps aux | grep mysqld

Trabajos:

mysql -uroot -p -h127.0.0.1
mysql -uroot -p --socket=/tmp/mysql.sock

No funciona:

mysql -uroot -p
mysql -uroot -p -hlocalhost

Puede solucionar este problema agregando la misma línea de socket en la [client]sección dentro de la configuración de mysql.

Dejan
fuente
13

Simplemente edite /etc/my.cnf Agregar las siguientes líneas amy.cnf

[mysqld]

socket=/var/lib/mysql/mysql.sock 

[client]

socket=/var/lib/mysql/mysql.sock

Reinicie mysql y conéctese nuevamente

mysql -u usuario -p contraseña base de datos -h host;

minhas23
fuente
La única respuesta correcta. Me pregunto por qué no tiene suficientes votos.
CentAu
11

Compruebe si su servicio mysqld se está ejecutando o no, si no se ejecuta, inicie el servicio.

Si su problema no se resuelve, busque /etc/my.cnfy modifique de la siguiente manera, donde verá una línea que comienza con socket. Haga una copia de seguridad de ese archivo antes de hacer esta actualización.

socket=/var/lib/mysql/mysql.sock  

Cambiar a

socket=/opt/lampp/var/mysql/mysql.sock -u root
vkGunasekaran
fuente
1
Hola Sekar, ingresé "find / -name my.cnf" y obtuve dos ubicaciones. 1) /opt/lampp/etc/my.cnf 2) /etc/mysql/my.cnf. Entonces, cuál usar ... Hice una pregunta aquí ... stackoverflow.com/questions/32437796/…
Nana Partykar
7

MariaDB, una bifurcación de MySQL desarrollada por la comunidad, se ha convertido en la implementación predeterminada de MySQL en muchas distribuciones.

Entonces, primero debes comenzar,

$ sudo systemctl start mariadb

Si esto falla, intente,

$ sudo systemctl start mysqld

Luego, para comenzar mysql,

$ mysql -u root -p

A partir de hoy, en Fedora el paquete se llama mariadb Y en Ubuntu se llama mariadb-server.

Por lo tanto, es posible que deba instalarlo si aún no está instalado en su sistema.

Gayan Weerakutti
fuente
7

Asegúrate de tener suficiente espacio /var. Si Mysql demon no puede escribir información adicional en la unidad, el servidor mysql no se iniciará y provocará el errorCan't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

Considere usar

expire_logs_days = 10
max_binlog_size = 100M

Esto lo ayudará a mantener bajo el uso del disco.

Karthik
fuente
Gracias, estoy ejecutando mysql en oracle virtualbox y cuando hice un volcado de mi bd, me quedé sin espacio y no pude iniciar el servidor mysql, cuando eliminé el archivo de volcado pude reiniciar el servidor mysql.
JayCee
1
Esto lo resolvió para mí. Tenía innodb_buffer_pool_size establecido en un valor muy alto para entornos de producción e hizo que mysql se bloqueara en mi máquina virtual.
Benjamin Brizzi
1
Tenía este problema cuando se utiliza phabricator y la solución era cambiar innodb_buffer_pool_sizeen my.cnf. Establecerlo en un valor pequeño como innodb_buffer_pool_size = 50Mes una buena prueba para descartar esta hipótesis;)
Yercalamarino
Ese era el maldito problema, comprobé todo menos el espacio en disco. ¡Espacio liberado de / var, volvió!
Nadjib Mami
5

Esto es lo que funcionó para mí:

ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
service mysqld restart
Usuario
fuente
4

Compruebe si se está ejecutando otro servicio mysql.

Kishore Relangi
fuente
4

Asegúrese de haber iniciado el servidor:

mysql.server start

Luego, conéctese con el usuario root:

mysql -uroot
Deniz Ozger
fuente
3

Si su mysql funcionaba anteriormente y se ha detenido de repente, simplemente "reinicie" el servidor.

Estaba enfrentando este problema en mi CentOS VPS .->

Estaba constantemente recibiendo

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'(2)

Intenté todas las técnicas, finalmente reiniciar el servidor solucionó los problemas ->

shutdown -r now

Espero que esto ayude !!

Shashank Agarwal
fuente
3

tratar

echo 0 > /selinux/enforce
dvin
fuente
3

si cambia archivos en / var / lib / mysql [como copiar o reemplazar eso], debe establecer el propietario de los archivos en mysql, esto es tan importante si el reinicio de mariadb.service ha sido lento

chown -R mysql: mysql / var / lib / mysql / *

chmod -R 700 / var / lib / mysql / *

Mohsen Beiranvand
fuente
2

Primero ingrese "service mysqld start" e inicie sesión

hPrasad
fuente
¿Qué quieres decir? lea las preguntas frecuentes antes de hacer una pregunta aquí
Freak
Esta pregunta fue respondida con éxito hace tres años. Esta respuesta exacta se dio más completamente el año pasado.
Cairnarvon
2

Asegúrese de haber instalado el servidor MySQL correctamente, me encontré con este error muchas veces y creo que es complicado depurarlo desde el socket, es decir, podría ser más fácil reinstalarlo.

Si está utilizando CentOS 7, esta es la forma correcta de instalarlo:

En primer lugar, agregue la fuente de la comunidad mysql
yum install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

Entonces puedes instalarlo yum install mysql-community-server

Comience con systemctl: systemctl start mysqld

Zernel
fuente
1

Mi problema fue que instalé mysql con éxito y funcionó bien.

Pero un día, ocurrió el mismo error.

No se puede conectar al servidor MySQL local a través del socket '/var/lib/mysql/mysql.sock' (2)

Y no existía ningún archivo mysql.sock.

Esta solución resolvió mi problema y mysql estaba funcionando nuevamente:

Inicie sesión como root:

sudo su -

Correr:

systemctl stop mysqld.service
systemctl start mysqld.service
systemctl enable mysqld.service

Prueba como root:

mysql -u root -p

MySQL ahora debería estar en funcionamiento.

Espero que esto también pueda ayudar a alguien más.

bharald
fuente
1

Tenga en cuenta que si bien mysql lee la información de la ubicación del archivo socket del archivo my.cnf, el programa mysql_secure_installation parece no hacerlo correctamente a veces.

Entonces, si eres como yo y barajas las cosas en el momento de la instalación, podrías meterte en la situación en la que puedes conectarte a la base de datos con mysql muy bien, pero la cosa no se puede asegurar (no usar ese script de todos modos).

Para solucionar esto, la sugerencia de sreddy funciona bien: haga un enlace suave desde donde el script esperaría el socket hasta donde realmente está. Ejemplo:

ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock

(Uso / tmp / como ubicación predeterminada para los sockets)

Ellert van Koperen
fuente
1

Me funcionó con los siguientes cambios

Cualquier ruta para el socket se menciona en [mysqld] y la misma en [client] en my.cnf y reinicie mysql

[mysqld] socket = / var / lib / mysql / mysql.sock

[cliente] socket = / var / lib / mysql / mysql.sock

minhas23
fuente
1

Una forma de reproducir este error: si pretendía conectarse a un servidor externo pero en lugar de conectarse al servidor local no existente:

eric@dev ~ $ mysql -u dev -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through 
socket '/var/lib/mysql/mysql.sock' (2)
eric@dev ~ $

Entonces debe especificar el host de esta manera:

eric@dev ~ $ mysql --host=yourdb.yourserver.com -u dev -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 235
Server version: 5.6.19 MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+-------------------------+
| Database                |
+-------------------------+
| information_schema      |
| mysql                   |
| performance_schema      |
+-------------------------+
3 rows in set (0.00 sec)

mysql> exit
Bye
eric@dev ~ $
Eric Leschinski
fuente
1

Esta podría ser una sugerencia estúpida, pero asegúrese al 100% de que su base de datos todavía esté alojada en localhost. Por ejemplo, si un administrador de red eligió (o cambió a) el alojamiento de Amazon DB, ¡necesitará ese nombre de host!

The One and Only ChemistryBlob
fuente
Estoy usando el proveedor de alojamiento 1 y 1 y recibí este error después de enviar el mensaje al host. La solución fue simplemente proporcionar el nombre de host "mysql -u dbo70123521 -p --host db70313321.db.1and1.com db703133520"
robar el
1

En mi caso, estaba importando una nueva base de datos y no pude volver a conectarme después de eso. Finalmente me di cuenta de que era un problema espacial.

Para que pueda eliminar la última base de datos y expandir su disco duro o lo que hice, restauró una instantánea de mi máquina virtual.

Por si alguien piensa que es útil

Evan
fuente
0

se encontró con este problema al intentar conectar mysql en el cliente SSH, y fue útil agregar la ruta del socket al comando cuando es necesario cambiar entre sockets.

> mysql -u user -p --socket=/path/to/mysql5143.sock
Jaak Kütt
fuente
0

Este es un problema si se está quedando sin espacio en disco. La solución es liberar algo de espacio del HDD.

Por favor, lea más para tener la explicación:

Si está ejecutando MySQL en LINUX, verifique el espacio libre de HDD con el comando disk free:

 df 

si obtienes algo así:

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2              5162828   4902260         0 100% /
udev                    156676        84    156592   1% /dev
/dev/sda3              3107124     70844   2878444   3% /home

¡Entonces este es el problema y ahora tienes la solución!

Como mysql.sock quiere crearse en la carpeta mysql, que casi siempre está debajo de la carpeta raíz, no se pudo lograr debido a la falta de espacio.

Si recibe periódicamente el comando ls en el directorio mysql (en openSUSE 11.1 está en / var / lib / mysql) obtendrá algo como:

hostname:/var/lib/mysql #
.protected  IT     files        ibdata1             mysqld.log  systemtemp
.tmp        NEWS   greekDB      mysql               mysqld.pid  test
ARXEIO      TEMP1  ib_logfile0  mysql.sock          polis
DATING      deisi  ib_logfile1  mysql_upgrade_info  restore

El archivo mysql.sock aparece y desaparece con frecuencia (debe intentar asignar con el ls para golpear una instancia con el archivo mysql.sock en la carpeta).

Esto se debe a que no hay suficiente espacio en disco.

Espero poder ayudar a algunas personas !!!! ¡Gracias!

c.chasapis
fuente
0

Tuve que desactivar explicit_defaults_for_timestampdesde my.cnf.

Powtac
fuente
0

Pruebe las primeras 2, 3 soluciones. El error es stil popup & Si no puede encontrar/var/lib/mysql/mysql.sock

find /var/ -name mysql.sock

Verifique el espacio disponible en / var /

df

Si el directorio está lleno, elimine algunos archivos / directorios no utilizados

rm /var/cache/*

Probablemente su problema se resolverá ahora.

Sadee
fuente
0

Si está en el shell de sf.net , intente:

mysql --host=mysql-{LETTER} --user={LETTER}{GROUP ID}admin -p

Cambie {LETTER} y {GROUP ID} como se muestra en su base de datos MySQL del perfil de administrador del proyecto.

Chetabahana
fuente