【MySQL】ERROR 1045

错误信息

ERROR 1045 (28000): Access denied for user 'xxx'@'xxx' (using password: YES)

错误复现

客户端连接服务器时,报错提示权限错误。

$ mysql -uroot -pxxx
Warning: Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

原因分析

  • 【1】用户名或者密码不正确
  • 【2】密码正确,但是当前用户没有权限,服务端拒绝了连接。

解决方法

1. 重置超管密码

适用于忘记root密码时,连不上数据库的情况。

停止服务 -> 跳过权限表 -> 重置超管密码 -> 恢复权限表

1.1 停止当前的MySQL服务

systemctl stop mysql

1.2 在配置文件中的 mysqld 一节,最后一行添加 skip-grant-tables ,跳过权限表

vi /etc/my.cnf
[mysqld]
...
skip-grant-tables

1.3 启动MySQL

systemctl start mysql

1.4 以超管用户登录,然后修改超管密码。

不用输入密码, 直接可以用root用户登录,此时已经跳过权限控制。

mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
...
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

查看当前登录用户,是一个‘空’用户

mysql> select current_user;
+--------------+
| current_user |
+--------------+
| @            |
+--------------+
1 row in set (0.03 sec)

重置root密码,将密码重置成mysql

mysql> update mysql.user set authentication_string=password('mysql') where user = 'root' and host = 'localhost';
Query OK, 1 row affected (0.13 sec)
Rows matched: 1  Changed: 1  Warnings: 0

1.5 恢复权限表并验证

删除配置文件中的 skip-grant-tables 放开权限控制

sed -i '/skip-grant-tables/d' /etc/my.cnf

重启MySQL服务

systemctl restart mysql

验证权限表是否恢复

$ mysql -uroot
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

验证超管密码能否正常登录

$ mysql -hlocalhost -uroot -pmysql
Warning: Using a password on the command line interface can be insecure.
...
mysql> 

参考资料

MySQL客户端连接提示1045错误的几种可能场景-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值