mysql出现ERROR 1698 (28000): Access denied for user ‘root‘@‘localhost‘错误解决方法

一、mysql安装

msyql安装

二、mysql问题描述

我的操作系统是ubuntu18.04,以下是我的mysql版本:
安装完成后,登录mysql的时候就出现了如下错误:
因为安装的过程中没让设置密码,可能密码为空,但无论如何都进不去mysql。
那么该怎么做呢,接下来就将这个解决方法总结记录一下。

三、问题引入

mysql中的user表存储的用户的登录及访问权限相关信息

ubuntu@vm10-0-0-63:~$ mysql -uroot -p
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| learn              |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
mysql> use mysql;
mysql> SELECT host,user,plugin,authentication_string FROM user;
+-----------+------------------+-----------------------+-------------------------------------------+
| host      | user             | plugin                | authentication_string                     |
+-----------+------------------+-----------------------+-------------------------------------------+
| localhost | root             | mysql_native_password | *93A7A369E0826D0F7CC2D10DCFDE91BAF99767EE |
| localhost | mysql.session    | mysql_native_password | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost | mysql.sys        | mysql_native_password | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost | debian-sys-maint | mysql_native_password | *45EE0C1C94421178D70C25100D8AC985DC4413BC |
| %         | root             | mysql_native_password | *93A7A369E0826D0F7CC2D10DCFDE91BAF99767EE |
+-----------+------------------+-----------------------+-------------------------------------------+

四、问题解决

  • step1:在ubuntu的terminal(也即终端)上输入:
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

进入到这个配置文件,然后在这个配置文件中的[mysqld]这一块中加入skip-grant-tables这句话。
在这里插入图片描述
作用:就是让你可以不用密码登录进去mysql。
保存:wq,退出。输入:

sudo service mysql restart

重新启动mysql。

  • step2:在终端上输入mysql -u root -p,遇见输入密码的提示直接回车即可,进入mysql后,分别执行下面三句话:
use mysql;   然后敲回车
update user set authentication_string=password("你的密码") where user="root";  然后敲回车
flush privileges;  然后敲回车

然后输入quit,退出mysql.

  • step3:重新进入到mysqld.cnf文件中去把刚开始加的skip-grant-tables这条语句给注释掉。
    在这里插入图片描述
    再返回终端输入mysql -u root -p,应该就可以进入数据库了。

  • step4:如果此时还是报出错误,那么就需要返回step3中,把注释掉的那条语句重新生效(就是删除#符号),重新进入mysql中,执行下面命令:

use mysql;
select user,plugin from user;

看下图:
±-----------------±----------------------+
| user | plugin |
±-----------------±----------------------+
| root | auth_socket |
| mysql.session | mysql_native_password |
| mysql.sys | mysql_native_password |
| debian-sys-maint | mysql_native_password |
| root | mysql_native_password |
±-----------------±----------------------+

从图中可以看到在执行了select user,plugin from user;后,错误原因是因为plugin root的字段是auth_socket,那我们改掉它为下面的mysql_native_password就行了。输入:

update user set authentication_string=password("你的密码"),plugin='mysql_native_password' where user='root';

然后回车执行以下,再输入select user,plugin from user;回车,我们能看到root用户的字段改成功了。
最后quit退出。返回执行step3。
那么这个问题就完全解决了。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值