Error de inicio de sesión de MySQL: ERROR 1045 (28000): Acceso denegado para la solución del usuario 'root'@'localhost'

  1. Descripción del problema

La base de datos Mysql5.7 instalada con docker en el servidor de la nube se usaba normalmente al principio, pero de repente un día después no se pudo conectar y el error se informó como: ERROR 1045 (28000): Acceso denegado para el usuario 'root' @'1xxx' (utilizando contraseña: SÍ), cuando se produce un error de Error 1045 al iniciar sesión en la base de datos MySQL, indica que el nombre de usuario o la contraseña ingresados ​​son incorrectos y se deniega el acceso
  1. Análisis de causa

  • servidor mysql detenido

  • El número de puerto o IP del usuario conduce a

  • Error del archivo de configuración de Mysql: my.ini y otros archivos

  • Contraseña incorrecta para el usuario root

Nota: Después de configurar el servicio MySQL, el usuario raíz predeterminado no puede realizar conexiones de acceso remoto
  1. Soluciones específicas

Elimine los errores anteriores a través de los siguientes pasos de inspección

(1) Compruebe si se ha iniciado el servicio mysql

Cuando el servidor mysql se detiene, se informará el error anterior. Aquí, se usa docker, así que use el comando docker ps para verificar si los servicios relacionados con mysql son normales.
#查看docker 相关服务
docker ps
...
#进入docker-mysql
docker exec -it docker_mysql bash
...
#进入mysql
 mysql -uroot -p
#然后输入密码
...
A través del comando anterior, puede verificar si mysql está iniciado,

(2) Modificar contraseña mysql

Después de configurar el servicio MySQL, el usuario raíz predeterminado no puede realizar conexiones de acceso remoto, o si la contraseña del usuario raíz es incorrecta, también se informará el error anterior, así que modifique la contraseña mysql para excluir

1) Verifique la contraseña temporal

La contraseña de mysql instalada por primera vez no se ha cambiado, use el siguiente comando para ver la contraseña temporal generada
grep "A temporary password is generated for root@localhost" /var/log/mysqld.log

2).Iniciar sesión

mysql -uroot -p
#然后输入临时密码,进入mysql端

3).Cambiar contraseña

ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
localhost representa la dirección, root representa la contraseña de la base de datos , root se puede cambiar a su propia contraseña

Ejecutar el código anterior puede resultar en un error:

Solución:

Ver la política de contraseñas actual
show variables like '%validate_password_policy%';
show variables like '%validate_password_length%';
modificar la política de contraseñas
Modificar longitud y debilidad
set global validate_password_policy=0; #设置为弱口令
set global validate_password_length=1; #密码最小长度为1

revisar de nuevo

ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';

refrescar

flush privileges;

abandonar

quit;

volver a registrarse

mysql -uroot -p
show databases;

(3) Habilitar el acceso remoto

use mysql;                                           #访问mysql库
update user set host = '%' where user = 'root';     #使root能在任何的host访问
FLUSH PRIVILEGES;                                    #刷新
Al ejecutar la actualización anterior, se puede informar un error:
Duplicate entry ‘%-root’ for key ‘PRIMARY’
Esto se debe a que hay varios usuarios ROOT registrados en la tabla USER. Lo mejor es eliminar el usuario cuyo campo de usuario es root, excepto el host cuyo campo de usuario es '%' o 'localhost', y luego usar el comando FLUSH PRIVILEGES para actualizarlo. el problema
Use select host from user where user = 'root'; verifique si el host ya tiene el valor %
Luego use el comando FLUSH PRIVILEGES para actualizar, lo que resuelve el problema anterior, conéctese a la base de datos nuevamente para ver si tiene éxito

(4) Modificar la configuración de mysql

1) Método 1

Agregar configuración en [ mysqlId ] de my.cnf
skip-grant-tables 
Esta configuración puede realizar un inicio de sesión remoto, pero no se recomienda omitir el permiso y escribir directamente en el archivo de configuración.

2) Método 2

Use los siguientes comandos para operar
grant all privileges on *.* to 'root'@'%' identified by '密码' with grant option;

FLUSH PRIVILEGES;
通过mysql -uroot -p 命令,并输入密码进入数据库
mysql -uroot  -p
然后执行下面命令
grant all privileges on *.* to 'root'@'%' identified by '密码' with grant option;
刷新并退出
FLUSH PRIVILEGES;
exit;

(5).总结

通过以上排除方法就可以解决 ERROR 1045 (28000)_ Access denied for user 'root'@'localhost'报错了
注意:
如果mysql是docker部署的,当每次重启容器时,可能需要再一次跑一下 步骤(4).修改mysql配置 这个命令,这个也有解决的办法:
#配置mysql密码还有默认的身份验证插件-解决每隔一段时间就会登陆不上问题
#身份插件-mysql_native_password 本地密码
default_authentication_plugin=mysql_native_password
#密码失效时间-永不过期
default_password_lifetime=0

其他解决办法:

docker exec -it 进入mysql,执行下面命令解决:
主要是 mysql_native_password 这个参数要注意
mysql -u root -p
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
flush privileges; 
exit;

Supongo que te gusta

Origin blog.csdn.net/zhoupenghui168/article/details/131186655
Recomendado
Clasificación