ERROR 2002 (HY000): No se puede conectar al servidor MySQL local a través del socket '/var/run/mysqld/mysqld.sock' (2)

441

Instalé LAMP en Ubuntu 12.04 LTS (Precise Pangolin) y luego configuré la contraseña de root en phpMyAdmin . Olvidé la contraseña y ahora no puedo iniciar sesión. Cuando intento cambiar la contraseña a través del terminal me sale:

ERROR 2002 (HY000): No se puede conectar al servidor MySQL local a través del socket '/var/run/mysqld/mysqld.sock' (2)

¿Cómo puedo arreglar esto? No puedo abrir LAMP, desinstalarlo o reinstalarlo.

sushmit sarmah
fuente
Probablemente reinstalarlo sea más fácil: stackoverflow.com/a/31984482/763744
Zernel
Restablezca la contraseña deteniendo MySQL e iniciándola en modo seguro omitiendo las --grant tables
davejal
escriba esto en su terminal "sudo apt-get install mysql-server"
Humphrey
Inicie o reinicie el servicio mysql y verifique. sudo /etc/init.d/mysql start o sudo /etc/init.d/mysql restart
Jitendra Patel
systemctl start mariadb.service
Thewebus

Respuestas:

253

Una vez tuve este problema y lo resolví instalando mysql-server, así que asegúrese de haber instalado el mysql-server, no el mysql-cliento algo más.

Ese error significa que el archivo /var/run/mysqld/mysqld.sockno existe, si no lo instaló mysql-server, entonces el archivo no existiría. Entonces, en ese caso, instálelo con

sudo apt-get install mysql-server

Pero si mysql-serverya está instalado y se está ejecutando, entonces debe verificar los archivos de configuración.

Los archivos de configuración son:

/etc/my.cnf
/etc/mysql/my.cnf
/var/lib/mysql/my.cnf

En /etc/my.cnf, la configuración del archivo de socket puede ser /tmp/mysql.socky en /etc/mysql/my.cnfla configuración del archivo de socket puede ser /var/run/mysqld/mysqld.sock. Entonces, elimine o cambie el nombre /etc/mysql/my.cnf, deje que mysql lo use /etc/my.cnf, entonces el problema puede resolverse.

remolcar
fuente
Puede tener el demonio mysql ejecutándose y el servidor mysql-core instalado, ¡pero necesita instalar el servidor mysql, que son los binarios Y la configuración de la base de datos del sistema!
Cedric
99
sudo apt-get install mysql-serverinstalar mysql en ubuntu
towry
99
Si tuviera que explicar técnicamente, diría 1) Si está ejecutando "mysql -u <nombre_de_usuario> -h <MySQL_Server_address> -p", en realidad está ejecutando el cliente mysql para acceder al servidor mysql. Si no tiene instalado el servidor mysql en la dirección / dirección IP que mencionó con '-h', aparecerá el error anterior. Esto se debe a que no puede conectarse al servidor MySQL a través del socket mysql.sock 2) Si Mysql-server ya está instalado, debería estar ejecutándose. Si no lo está, observará el mismo error. Así que ejecútelo en el servidor que especificó.
Mayur Nagekar
1
Esto también puede ocurrir si intenta cambiar el directorio donde está almacenada la base de datos, pero introduce el directorio incorrecto en el archivo de configuración (como un error tipográfico). En lugar de decirte que el directorio tipográfico no existe, te dirá que no tienes permiso para acceder a él.
Michael
44
Como primer paso, recomendaría un intento de reiniciar el proceso del servidor (consulte las distinciones de otro servidor contra el cliente). Prueba sudo /etc/init.d/mysql restart. Por lo general, la reinstalación no es necesaria. Le recomendaría que primero verifique los archivos de registro. No solo el archivo de registro de mysql, sino también / var / log / syslog, ya que es posible que haya tenido un bloqueo del servidor que causa que mysql se rompa como efecto secundario.
Rein
212

Prueba esto:

mysql -h 127.0.0.1 -P 3306 -u root -p <database>

Además (para ver si se está ejecutando):

telnet 127.0.0.1 3306 

Probablemente es solo una configuración incorrecta en el my.cnfarchivo, en /etc/somewhere(dependiendo de la distribución de Linux ).

Yannick
fuente
1
Me sale el mismo error. Y lo he comprobado y el enlace predeterminado en main y my.cnf ya está configurado en 127.0.0.1. Sin embargo, usar su comando anterior me permitió conectarme. Tendré que seguir buscando para ver por qué solo hacer "mysql" es dar el error
cchiera
1
Recibo telnet: no se puede conectar al host remoto: conexión rechazada como resultado del comando telnet. Sin embargo, apache todavía se ejecuta, ya que puedo abrir localhost
Rishi Dua
@cchiera Sabes, no tuve este error antes. Pero cuando quería conectarme a mi base de datos a través de una aplicación de iOS usando el túnel ssh, recibí este error de 2013. Para resolverlo tuve que editar /etc/my.cnfy comentar #bind-address = 127.0.0.1 Referencia 1 Referencia 2 . Entonces podría conectarme. Después de esto, me di cuenta de que ahora recibía este error de 2002 que me llevó a esta respuesta y ahora está funcionando nuevamente. Definitivamente, estoy de acuerdo con usted al obtener una explicación sobre por qué simplemente escribir mysqlsin -harrojar un error.
Pathros
Nota: mysql -h localhostno funciona Asegúrese de usar mysql -h 127.0.0.1como se especifica en la respuesta.
vadasambar
¿Cómo puedo resolver esto si puedo iniciar sesión con el comando en esta respuesta?
Carlos A. Jiménez Holmquist
128

Estoy viendo todas estas respuestas, pero ninguna ofrece la opción de restablecer la contraseña y ninguna respuesta aceptada . La pregunta real es que olvidó su contraseña, por lo que debe restablecerla, no ver si se está ejecutando o no (instalada o no) como implica la mayoría de estas respuestas.


Para restablecer la contraseña

Siga estos pasos (puede ser útil si realmente olvida su contraseña y puede probarla en cualquier momento, incluso si no se encuentra en la situación en este momento):

  1. Detener mysql

    sudo /etc/init.d/mysql stop

    O para otras versiones de distribución:

    sudo /etc/init.d/mysqld stop
  2. Inicie MySQL en modo seguro

    sudo mysqld_safe --skip-grant-tables &
  3. Inicie sesión en MySQL usando root

    mysql -uroot
  4. Seleccione la base de datos MySQL para usar

    use mysql;
  5. Restablecer la contraseña

    -- MySQL version < 5.7
    update user set password=PASSWORD("mynewpassword") where User='root';
    
    -- MySQL 5.7, mysql.user table "password" field -> "authentication_string"
    
    update user set authentication_string=password('mynewpassword') where user='root';
  6. Limpiar los privilegios

    flush privileges;
  7. Reiniciar el servidor

    quit
  8. Pare e inicie el servidor nuevamente

    Ubuntu y Debian:

    sudo /etc/init.d/mysql stop
    ...
    sudo /etc/init.d/mysql start

    En CentOS, Fedora y RHEL:

    sudo /etc/init.d/mysqld stop
    ...
    sudo /etc/init.d/mysqld start
  9. Inicie sesión con una nueva contraseña

    mysql -u root -p
  10. Escriba la nueva contraseña y disfrute de su servidor nuevamente como si nada hubiera pasado

Esto fue tomado de Restablecer una contraseña de root de MySQL .

davejal
fuente
La actualización de la contraseña de los usuarios no funcionó para mí, sin embargo, una vez que inicié sesión en el monitor MySQL y usé la base de datos mysql, repair table user use_frmfuncionó para mí para resolver este problema. - stackoverflow.com/questions/4297592/…
Craig van Tonder
20
En MySQL 5.7, se eliminó el campo de contraseña en el campo de tabla mysql.user, ahora el nombre del campo es 'autenticación_cadena', por lo que (5) debería serupdate user set authentication_string=password('mynewpassword') where user='root';
Daniel
¿Sabrías una manera de hacer de esto un script bash? Parece que lo necesito cada vez que reinicio la caja.
vphilipnyc
Algo me dice que quieres una solución alternativa, pero en realidad debes tratar de descubrir por qué necesitas hacer esto cada vez y solucionarlo. En cuanto al guión, haga una nueva pregunta y publique lo que ya intentó, tal vez algunos otros podrían ayudarlo
davejal
2
Esto funcionó muy bien para mí, pero primero tuve que implementar esta solución: stackoverflow.com/questions/42153059/…
Andrew Fox
68

Intenté los siguientes pasos:

  1. Inicie sesión como super usero usesudo
  2. Abrir /etc/mysql/my.cnfusando gedit
  3. Busque bind-addressy cambie su valor a la dirección IP de la máquina host del servidor de la base de datos. Para mí fue localhosto127.0.0.1
  4. Guarde y cierre el archivo.
  5. Vuelve a la terminal y ejecuta sudo service mysql start

Y funcionó para mí.

rshahriar
fuente
44
A partir de esto, acabo de ejecutar sudo service mysql restart y funcionó.
Orane
En mi caso, el error fue el cambio de IP, así que configuré bind-address = localhost
Nicolás Arias
@rshahriar no hay nada llamado bind-address en mi /etc/my.cnf ¿es una buena idea agregar el campo?
RCBian
@SilvioDelgado No si alguna vez quieres conectarte a través de túneles ssh. Explicación aquí
Pathros
reiniciar el servicio mysql también funcionó para mí, pero aún no estoy seguro de dónde encontrar el registro de errores para descubrir la causa y tratar de evitar que vuelva a suceder ...
Maleka
41

Solucioné este problema ejecutando el siguiente comando:

mysql.server start

Y si está en una Mac y usó brew para instalar mysql, simplemente use:

brew services start mysql
sbodanis
fuente
35

Tuve un problema similar. mysql no comenzaría:

sudo service mysql start
start: Job failed to start

Si deshabilité apparmor:

sudo aa-complain /etc/apparmor.d/*

El problema se fue. El problema era que mysqld intentaba acceder a /run/mysqld/mysqld.sock pero el perfil de apparmor solo daba permiso a /var/run/mysqld/mysqld.sock (/ var / run está enlazado a / run, así que estos son realmente lo mismo). No estoy seguro de por qué mysqld no está utilizando la ruta var, ya que eso está configurado en todos los archivos de configuración, pero puede solucionar el problema agregando lo siguiente a /etc/apparmor.d/usr.sbin.mysqld

/run/mysqld/mysqld.pid rw,
/run/mysqld/mysqld.sock rw,
dkoes
fuente
No sabía que tenía que llamar "sudo service mysql start". La última vez que instalé MySQL en Ubuntu, creo que se inició automáticamente después de la instalación. MariaDB en Manjaro requiere que el servicio se inicie explícitamente después de la instalación.
dmiller309
31

En mi caso fue que el disco estaba lleno y mysqld ya no podía comenzar.

Intente reiniciar el servicio mysql.

> service mysql restart

o

> service mysql stop

> service mysql start

Si no reconoce el stopcomando, definitivamente es el espacio en disco. Deberías hacer algo de espacio en la particiónmysql asignada o agrandar el disco.

Verifique el espacio en disco con

> df -h
Martin Schultz
fuente
2
Me pasó lo mismo: disco completo. Limpié un poco de espacio, reinició y el problema desapareció.
Darren
2
Si ese es su problema al ejecutar: "/etc/init.d/mysqld start" le dirá que su partición de disco está llena
Tickon
Lo mismo para mí, disco 100%. Espacio limpio e inicio de servicio ok
Hugo
28

Resolví esto matando el mysqlproceso:

ps -ef | grep mysql
kill [the id]

Y luego comencé el servidor nuevamente con:

sudo /etc/init.d/mysql restart

Pero también startfunciona:

sudo /etc/init.d/mysql start

Luego inicié sesión como admin, y ya estaba.

Wartari
fuente
bueno, en realidad estaba abortando mysql antes de que fallara. Luego aparece "* Por favor, eche un vistazo al syslog". y "ERROR 2002 (HY000): No se puede conectar al servidor MySQL local a través del socket '/var/run/mysqld/mysqld.sock' (111)". Finalmente, me doy cuenta de que está tratando de recuperarse, así que lo mato y lo reinicio.
cwhsu
Hay situaciones (raras) en las que "mysql start" fallará, por lo que debe usar el argumento "restart". Si necesita matar un proceso de daemon, es mejor usar el argumento "detener" en lugar del comando kill. Sin embargo, el comando killall es más conveniente que el comando kill (killall mysqld).
Rein
Matar el proceso de MySQL y luego reiniciar MySQL funcionó para mí, agradable
Vishal Shetty
21

De alguna manera, el proceso del servidor MySQL no creó el socket, o el cliente está buscando el socket en el lugar equivocado.

Mi primera sugerencia sería verificar si el servidor MySQL se está ejecutando. La segunda sugerencia podría ser: ¿se está ejecutando el servidor MySQL en otro host? Si es así, agregue el-h <hostname> bandera a su cliente MySQL en la terminal.

Si MySQL se está ejecutando, y se está ejecutando localmente, verifique su my.cnfarchivo. Debería haber una línea como

socket = /var/run/mysqld/mysqld.sock

Vea si eso coincide con la ubicación del socket que mencionó en su publicación.

Por experiencia, diría que el escenario más probable es que su servidor MySQL no se ejecuta en absoluto o no se ejecuta en el mismo host donde ejecuta su cliente MySQL desde el terminal.

Wouter
fuente
19

Acabo de experimentar el mismo problema después de que tuve que reiniciar mi servidor de producción. Estoy ejecutando Debian 8.1 (Jessie) en una gota de DigitalOcean.

Esto es lo que hice para resolver mi problema:

  1. Comprueba si el archivo /var/run/mysqld/mysqld.sockexiste. Si no es así, créelo manualmente ingresando touch /var/run/mysqld/mysqld.sock(que es lo que tenía que hacer).

  2. Entonces el proceso MySQL puede usar este archivo. Cambie la propiedad de dicho archivo ingresando chown mysql /var/run/mysqld/mysqld.sock.

  3. Una vez que se haya hecho '2', reinicie el servicio MySQL ingresando service mysql restarto /etc/init.d/mysql restart.

Después de seguir los pasos anteriores, mi problema se resolvió. Rara vez tengo este problema, y ​​probablemente haya una mejor manera, por lo que, de ser necesario, proporcione comentarios constructivos :).

Robar
fuente
1
Noté que el archivo no estaba allí y simplemente reinicié el servidor mysql. Creó automáticamente el archivo y se inició muy bien. Gracias por el liderato.
Sojurn
15

Su servidor mysql podría no estar ejecutándose. Asegúrese de que se ejecuta escribiendo mysql.server starten la terminal.

Moses Wasswa
fuente
15

Comprobar el "bind-adress" parámetro en my.cnf.

De lo contrario, intente con el comando:

mysql -h 127.0.0.1 -P 3306 -u root -p
  • -h para el host 127.0.0.1, es decir, localhost

  • -P (aviso -P como mayúscula) para el puerto 3306, es decir, el puerto predeterminado para MySQL

Amit Girme
fuente
11

Esto es lo que funcionó para mí:

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

Esto crea un enlace.

Usuario
fuente
No funcionó para mí :( Esto crea un enlace simbólico entre las dos carpetas askubuntu.com/a/56340/242873
Michael
11

Si está utilizando Amazon EC2 y tiene este problema en la instancia, solo necesita hacer lo siguiente:

sudo yum install mysql-server
sudo service mysqld restart

Amazon EC2 no tiene un servidor instalado (solo está instalado el cliente), por lo que, en caso de que sea necesario, debe instalarlo en su instancia, y después de eso intente

 mysql -u root -p

para comprobar si eso funcionó.

Murtaza Kanchwala
fuente
Error al reiniciar mysqld.service: Unidad mysqld.service no encontrada. En Ubuntu 16.04
Ketav Chotaliya
9

Creo que cada vez que recibes el error

ERROR 2002 (HY000): no se puede conectar al servidor MySQL local a través del socket '/var/lib/mysql/mysql.sock'

Primero recomendaré verificar si su mysqldemonio se está ejecutando ... La mayoría de las veces no se ejecutará de manera predeterminada. Puedes consultarlo por/etc/init.d/mysqld status .

Si no se está ejecutando, primero inícielo:

.../etc/init.d/mysqld start.

Apuesto a que funcionará al 110%.

vikash kumar singh
fuente
9

En lugar de usar localhost:

mysql -u myuser -pmypassword -h localhost mydatabase

Use 127.0.0.1

mysql -u myuser -pmypassword -h 127.0.0.1 mydatabase

(también tenga en cuenta que no hay espacio entre -p y mypassword)

Disfruta :)

mpinvidio
fuente
Tampoco puede incluir su contraseña desde la línea de comandos por seguridad utilizando esta línea: mysql -u myuser -p -h 127.0.0.1 mydatabase MySQL le pedirá su contraseña y no la hará eco.
DDay
1
Esto lo resolvió para mí. Sin embargo, todavía me pregunto por qué 127.0.0.1funciona mientras localhostque no.
not2savvy
9

Asegúrese de tener copias de seguridad de bases de datos importantes y luego intente desinstalar cosas relacionadas con MySQL :

apt-get remove --purge mysql\*

Luego instálalo de nuevo :

apt-get install mysql-server mysql-client

Esto funcionó para mí y los datos se guardaron.

Si PHP MySQL muestra errores, es posible que deba reinstalar PHP MySQL :

apt-get install php5-fpm php5-mysql
usuario3162468
fuente
Creo que esa es el arma fatal. Lo intenté todo, pero solo tu propuesta es lo que me ayudó. Gracias !
Messou
9

También me enfrento al mismo problema que ocurrirá si su sistema mysql serverno se está ejecutando de forma predeterminada, se detendrá nuevamente después de algunos segundos para que ejecute nuevamente el $ sudo service mysql start comando ( ) que puede cambiar si lo sabe.

para ese comando de uso

$ sudo service mysql start   

(ingrese la contraseña de usuario si es necesario porque la usamos sudo) y luego ejecute

$ sudo mysql -u root -p          (put user password if required )

ahora tienes tu base de datos

Roko
fuente
7

Si su instalación fue reciente, debe confirmar si su instalación es el SERVIDOR de instalación ... como mysql-server-5.5 .. Tal vez instaló solo "mysql" ... esto es solo cliente en lugar del servidor.

Leandro Souza
fuente
7

Si tiene XAMPP instalado en su máquina Linux, intente copiar su my.cnfarchivo de /opt/lampp/etc/my.cnfa /etc/my.cnf.

Luego, ejecute de mysql -u rootnuevo ... Ahora debe tener el socket correcto y poder ejecutar el cliente MySQL.

Toni Widiarto
fuente
7

También tengo este problema, pero acabo de hacerlo:

sudo service mysql restart 

Funcionó para mi.

Kenny Ong
fuente
7

ENCONTRÉ LA SOLUCIÓN

Antes de disparar el comando:mysql_secure_installation

  • Paso 1: sudo systemctl stop mariadb
  • Paso 2: sudo systemctl start mariadb
  • Paso 3: mysql_secure_installation

Luego le pedirá la contraseña de root y simplemente puede presionar Enter y establecer su nueva contraseña de root.

sagar mahajan
fuente
6

En mi caso, el puerto predeterminado 3306 estaba siendo utilizado por algún otro proceso y, por lo tanto, no se estaba iniciando. Después de que detuve el otro servicio y lo hice sudo service mysql start, funcionó bien. Por cierto, puede usar algo como sudo lsof -Pn -iTCP:3306para ver quién puede estar usando el puerto.

Bhaskar
fuente
6

En mi caso funcionó haciendo algo de I + D:

Puedo conectarme a MySQL usando

root-debian#mysql -h 127.0.0.1 -u root -p

Pero no está funcionando con mysql -u root -p .

No encontré ninguno bind-addressen my.cnf . Así que comentaré el parámetro socket=/var/lib/mysql/mysqld.socken el my.cnfque me estaba causando un problema con el inicio de sesión.

Después de reiniciar el servicio, todo salió bien:

root@debian:~# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.6.19 MySQL Community Server (GPL)
Swapna Kumar
fuente
6

Resolví este problema con reiniciar mysql

/etc/init.d/mysql stop

y

/etc/init.d/mysql start

Eso es.

Jazuly
fuente
5

Por experiencia, digo que debe verificar si el servidor se está ejecutando primero y luego intentar configurar MySQL. La última solución es reinstalar MySQL.

elmaazouz
fuente
5

Abra la terminal y escriba:

sudo apt-get purge mysql-client-core-5.6

sudo apt-get autoremove

sudo apt-get autoclean

sudo apt-get install mysql-client-core-5.5

sudo apt-get install mysql-server  

Tanto el cliente central de la base de datos MySQL como los paquetes del servidor MySQL tendrán la misma versión 5.5. MySQL Client 5.5 y MySQL Server 5.5 son las "mejores" versiones actuales de estos paquetes en Ubuntu 14.04 según lo determinan los encargados del mantenimiento del paquete.

Si prefiere instalar MySQL Client 5.6 y MySQL Server 5.6, también puede encontrar los paquetes mysql-client-core-5.6 y mysql-server-5.6 en el Centro de software de Ubuntu. Lo importante es que los números de versión de cliente y servidor coincidan en cualquier caso.

Esto funcionó para mí.

Akshay
fuente
5

Comprueba si tienes los derechos correctos:

sudo chmod 755 /var/lib/mysql/mysql

Tuve los mismos problemas y esto funcionó para mí. Después de hacer esto pude iniciar MySQL.

user3599321
fuente
5

En mi caso, parece que realmente no pude matar el proceso mysql, cuando ejecuto

sudo service mysql stop
ps -ef | grep mysql

El proceso mysql siempre estuvo ahí, parece que estaba bloqueando el archivo socket y el nuevo proceso mysql no pudo crearlo por sí mismo.

así que esto ayudó

cd /var/run
sudo cp mysqld/ mysqld.bc -rf
sudo chown mysql:mysql mysqld.bc/
sudo service mysql stop
sudo cp mysqld.bc/ mysqld -rf
sudo chown mysql:mysql mysqld -R
sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &

Ahora puedo iniciar sesión en la base de datos usando

mysql -u root

Luego, para actualizar la contraseña de root:

UPDATE user SET authentication_string=password('YOURPASSWORDHERE') WHERE user='root';
FLUSH PRIVILEGES;

PD : tuve problemas para actualizar la contraseña de root, parece un problema con el complemento "auth_socket", así que tuve que crear un nuevo usuario con todos los privilegios

insert into user set `Host` = "localhost", `User` = "super", `plugin` = "mysql_native_password", `authentication_string` = NULL, `password_expired` = "N", `password_lifetime` = NULL, `account_locked` = "N", `Select_priv` = "Y",
`Insert_priv` = "Y", `Update_priv` = "Y", `Delete_priv` = "Y", `Create_priv` = "Y", `Drop_priv` = "Y", `Reload_priv` = "Y", `Shutdown_priv` = "Y", `Process_priv` = "Y", `File_priv` = "Y",
`Grant_priv` = "Y",  `References_priv` = "Y", `Index_priv` = "Y", `Alter_priv` = "Y", `Show_db_priv` = "Y", `Super_priv` = "Y", `Create_tmp_table_priv` = "Y", `Lock_tables_priv` = "Y",
`Execute_priv` = "Y", `Repl_slave_priv` = "Y",  `Repl_client_priv` = "Y",  `Create_view_priv` = "Y", `Show_view_priv` = "Y", `Create_routine_priv` = "Y", `Alter_routine_priv` = "Y",
`Create_user_priv` = "Y",  `Event_priv` = "Y", `Trigger_priv` = "Y", `Create_tablespace_priv` = "Y";

Esto crea al usuario "super" sin contraseña y luego puede conectarse con mysql -u super

Buksy
fuente
gracias por la respuesta y pude iniciar sesión en mysql, pero no hay una tabla de usuario en mis bases de datos.
John Joe
Esta solución funciona Pero antes de ejecutar la instrucción sql para cambiar la contraseña de root, debe seleccionar una base de datos. Ejecute la siguiente instrucción <br> use mysql;<br> y ahora puede usar <br>UPDATE user SET authentication_string=password('YOURPASSWORDHERE') WHERE user='root'; FLUSH PRIVILEGES;
Charle K.
5

En el servidor de Debian Jessie, mi solución de trabajo era simplemente hacer

service mysql restart
service mysql reload

como usuario root

Thomas Webber
fuente