MySQL falla en: mysql "ERROR 1524 (HY000): el complemento 'auth_socket' no está cargado"

126

Mi entorno local es:

  • Ubuntu 16.04 nuevo
  • con PHP 7
  • con MySQL 5.7 instalado

    sudo apt-get install mysql-common mysql-server

Cuando intenté iniciar sesión en MySQL (a través de CLI):

mysql -u root -p

Encontré un problema cíclico con 3 pasos.

1) Primero fue un problema de socket

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'

Solución: reiniciar la PC.

Lo que condujo a otro error:

2) Con acceso denegado

ERROR 1698 (28000): Access denied for user 'root'@'localhost'.

Posible problema? ¡Contraseña incorrecta para el usuario "root"!

Solución: restablezca la contraseña de root con este tutorial .

Con la contraseña correcta y el socket de trabajo, llega el último error.

3) Complemento de autenticación incorrecto

mysql "ERROR 1524 (HY000): Plugin 'unix_socket' is not loaded"

Aquí me detuve o de alguna manera llegué a 1) nuevamente.

Tomáš Votruba
fuente
1
Me alegro de que funcione bien para ti :) ¡Gracias por comunicarte!
Tomáš Votruba

Respuestas:

371

Tengo una solución!

Al restablecer la contraseña de root en el paso 2), también cambie el complemento de autenticación a mysql_native_password:

use mysql;
update user set authentication_string=PASSWORD("") where User='root';
update user set plugin="mysql_native_password" where User='root';  # THIS LINE

flush privileges;
quit;

¡Esto me permitió iniciar sesión con éxito!


Solución de código completo

1. ejecutar comandos bash

1. Primero, ejecuta estos comandos bash

sudo /etc/init.d/mysql stop # stop mysql service
sudo mysqld_safe --skip-grant-tables & # start mysql without password
# enter -> go
mysql -uroot # connect to mysql

2. luego ejecute los comandos mysql => copie y pegue esto en cli manualmente

use mysql; # use mysql table
update user set authentication_string=PASSWORD("") where User='root'; # update password to nothing
update user set plugin="mysql_native_password" where User='root'; # set password resolving to default mechanism for root user

flush privileges;
quit;

3. ejecutar más comandos bash

sudo /etc/init.d/mysql stop 
sudo /etc/init.d/mysql start # reset mysql
# try login to database, just press enter at password prompt because your password is now blank
mysql -u root -p 

4. Problema del zócalo (de sus comentarios)

Cuando ve un error de socket , una comunidad vino con 2 posibles soluciones:

sudo mkdir -p /var/run/mysqld; sudo chown mysql /var/run/mysqld
sudo mysqld_safe --skip-grant-tables &

(gracias a @Cerin)

O

mkdir -p /var/run/mysqld && chown mysql:mysql /var/run/mysqld  

(gracias a @Peter Dvukhrechensky)


Caminos ciegos y posibles errores de borde

Use 127.0.0.1 en lugar de localhost

mysql -uroot # "-hlocalhost" is default

Puede provocar un "archivo faltante" o un error slt.

mysql -uroot -h127.0.0.1

Funciona mejor

Omitir el problema del socket

He encontrado muchas formas de crear un mysqld.sockarchivo, cambiar los derechos de acceso o vincularlo. No era el problema después de todo.

Salta el my.cnfarchivo

El problema tampoco estaba allí. Si no está seguro, esto podría ayudarlo .

Tomáš Votruba
fuente
3
Gracias por esto. Esta también es una excelente respuesta sobre cómo restablecer el pase de raíz de mysql, por lo que es posible que desee editar ligeramente el título para ayudarlo a que aparezca antes de que ya nos encontremos con el problema del socket.
Wtower
1
Me alegra que haya ayudado. ¿Cómo editaría el título para mantener el mensaje de origen? Entiendo que la solución requiere restablecer la contraseña, pero no resuelve el problema en el título. Este es un fracaso más complejo de más puntos. Para restablecer la contraseña de root, iría aquí: stackoverflow.com/a/6401963/1348344
Tomáš Votruba
1
@matanster No realmente, esto es puro paso a paso de prueba-falla construido. ¿Qué sistema operativo usas?
Tomáš Votruba
8
Su llamada mysqld_safe es incorrecta. En su lugar, debe ejecutar:sudo mkdir -p /var/run/mysqld; sudo chown mysql /var/run/mysqld; sudo mysqld_safe --skip-grant-tables &
Cerin
3
Agregue una posible solución del problema del socket a la respuesta. Como este mkdir -p /var/run/mysqld && chown mysql:mysql /var/run/mysqldPuede ahorrarle tiempo a alguien
Peter Dvukhrechensky
41

Puedes probar lo siguiente, me funciona.

Iniciar servidor:

sudo service mysql start

Ahora, vaya a la carpeta de calcetines:

cd /var/run

Copia de seguridad del calcetín:

sudo cp -rp ./mysqld ./mysqld.bak

Detener servidor:

sudo service mysql stop

Restaurar el calcetín:

sudo mv ./mysqld.bak ./mysqld

Inicie mysqld_safe:

 sudo mysqld_safe --skip-grant-tables --skip-networking &

Shell de inicio mysql:

 mysql -u root

Cambia la contraseña:

Por lo tanto, primero elija la base de datos

mysql> use mysql;

Ahora ingrese a continuación dos consultas:

mysql> update user set authentication_string=password('123456') where user='root';
mysql> update user set plugin="mysql_native_password" where User='root'; 

Ahora todo estará bien.

mysql> flush privileges;
mysql> quit;

Para comprobar:

mysql -u root -p

¡hecho!

N.B, After login please change the password again from phpmyadmin

Revisa ahora hostname/phpmyadmin

Username: root

Password: 123456

Para obtener más detalles, consulte Cómo restablecer la contraseña olvidada phpmyadmin en Ubuntu

Bablu Ahmed
fuente
2
solo esto funciona para mi! el socket de copia de seguridad y restauración es bastante inteligente
touhid udoy
1
ERROR 1045 (28000): acceso denegado para el usuario 'root' @ 'localhost' (usando la contraseña: SÍ) antes del "hecho" en su respuesta cuando intente iniciar sesión con 123456.
trainoasis
Resolví hacer los pasos descritos en phpmyadmin (es decir, cambiar la contraseña, cambiar el complemento). Por alguna razón, 'establecer autenticación_cadena = contraseña (...)' hizo que dejara de funcionar (Error 1045 (28000): Acceso denegado ...).
Fil
12

El mysqlcomando por defecto usa sockets UNIX para conectarse a MySQL.

Si está utilizando MariaDB, debe cargar el complemento de autenticación de socket de Unix en el lado del servidor.

Puede hacerlo editando la [mysqld]configuración de esta manera:

[mysqld]
plugin-load-add = auth_socket.so

Dependiendo de la distribución, el archivo de configuración generalmente se encuentra en /etc/mysql/o/usr/local/etc/mysql/

rustyx
fuente
1
Éste. Todas las otras respuestas explican cómo solucionar el error. Este explica cómo RESOLVERlo.
Envite
Si está en MariaDB 10.4.3 y versiones posteriores, el complemento de autenticación unix_socket debe instalarse de manera predeterminada, pero si lo referencia incorrectamente como plugin = "auth_socket", en lugar de plugin = "unix_socket" al actualizar su "usuario", usted recibirá este mensaje un tanto engañoso. Mi respuesta explica cómo lo estropeé.
Rohn Adams
9

Puedes probar estos algunos pasos:

Detenga el servicio Mysql primero sudo /etc/init.d/mysql stop

Inicie sesión como root sin contraseña sudo mysqld_safe --skip-grant-tables &

Después de iniciar sesión en la terminal mysql, debe ejecutar más comandos:

use mysql;

UPDATE mysql.user SET authentication_string=PASSWORD('solutionclub3@*^G'), plugin='mysql_native_password' WHERE User='root';

flush privileges;

sudo mysqladmin -u root -p -S /var/run/mysqld/mysqld.sock shutdown

Después de reiniciar su servidor mysql Si aún enfrenta un error, debe visitar: Restablecer la contraseña de root de MySQL 5.7 Ubuntu 16.04

Inderpal Singh
fuente
8

Para Ubuntu 18.04 y mysql 5.7

  • paso 1: sudo mkdir /var/run/mysqld;

    paso 2: sudo chown mysql /var/run/mysqld

    Paso 3: sudo mysqld_safe --skip-grant-tables& salir (use salir si está atascado)

iniciar sesión en mysql sin contraseña

  • paso 4: sudo mysql --user=root mysql

    paso 5: SELECT user,authentication_string,plugin,host FROM mysql.user;

    paso 6: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root'

ahora inicie sesión con

  • mysql -u root -p <root>
arunava maiti
fuente
1
pero ¿en qué paso puedo establecer el pase para root? porque lo intenté $ mysql -u root -ppero el acceso fue denegado todavía Access denied for user 'root'@'localhost' (using password: YES)Traté de ingresar la contraseña 'SÍ'
AlexNikonov
4

Pruébelo: sudo mysql_secure_installation

El trabajo está en Ubuntu 18.04

Gorcer
fuente
1

En caso de que alguien aterrice aquí después de cometer el mismo error que hice:

  1. Cambiado a plugin="mysql_native_password"temporalmente. Realicé mis tareas.
  2. Intenté volver al complemento "auth_socket", pero lo mencioné incorrectamente como plugin="auth_socket"resultadomysql "ERROR 1524 (HY000): Plugin 'auth_socket' is not loaded"
  3. Al carecer de una forma de iniciar sesión para solucionar este error, me vi obligado a tener que detener mysql y usar mysql_safepara omitir la autenticación para cambiar al complemento apropiadoplugin="unix_socket"

Esperemos que esto ahorre algo de tiempo a alguien si recibe el mensaje de error del póster original, pero la verdadera causa fue cambiar el nombre del complemento, en realidad no le falta la existencia del complemento "auth_socket", que según la documentación de MariaDB :

En MariaDB 10.4.3 y versiones posteriores, el complemento de autenticación unix_socket se instala de manera predeterminada, y la cuenta de usuario 'root' @ 'localhost' lo usa de manera predeterminada.

Rohn Adams
fuente
-7

Puedes probar con los siguientes comandos:

hduser@master:~$ sudo /etc/init.d/mysql stop
[ ok ] Stopping mysql (via systemctl): mysql.service.
hduser@master:~$ sudo /etc/init.d/mysql start
[ ok ] Starting mysql (via systemctl): mysql.service.
genghenggao
fuente
¿Puedes explicar eso más? ¿Cómo resuelve el reinicio del servidor el mensaje de error dado?
Nico Haase