MYSQL——ERROR1698(28000):Access denied for user root@localhost

MYSQL——ERROR1698(28000):Access denied for user root@localhost

安装环境:

  Ubuntu18.04+Mysql5.7。通过以下命令进行了安装:

sudo apt install mysql-server-5.7

结果在安装完成后通过root用户登录时报了上面的问题,其实就是因为安装过程中也没有设置过root用户的登录密码。

解决方法:

1、修改mysqld.cnf配置文件

  找到并打开mysqld.cnf,然后在该配置文件中的[mysqld]标签下最后一行加入skip-grant-tables

sudo gedit /etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld]
#
# * Basic Settings
#
user              = mysql
pid-file          = /var/run/mysqld/mysqld.pid
socket           = /var/run/mysqld/mysqld.sock
port              = 3306
basedir          = /usr
datadir          = /var/lib/mysql
tmpdir          = /tmp
lc-messages-dir   = /usr/share/mysql
skip-external-locking
character-set-server=utf8
collation-server=utf8_general_ci
skip-grant-tables    <-- add here

  添加了这句话以后,我们就可以不用密码登录就能进入mysql了,在修改保存之后,重启mysql服务:

service mysql restart
2、设置root密码

  在步骤1后,在终端上输入mysql -u -root -p,提示输入密码时直接回车即可,此时发现你已经进入到mysql了,而后输入以下命令:

use mysql;   #然后敲回车
update user set authentication_string=password("你的密码") where user="root";  #然后敲回车
flush privileges;  #然后敲回车
结果如上图,最后输入`quit;`,退出mysql。
3、注释掉skip-grant-tables

  重新编辑mysqld.cnf,将步骤1中添加的skip-grant-tables语句注释掉。

[mysqld]
#
# * Basic Settings
#
user              = mysql
pid-file          = /var/run/mysqld/mysqld.pid
socket           = /var/run/mysqld/mysqld.sock
port              = 3306
basedir          = /usr
datadir          = /var/lib/mysql
tmpdir          = /tmp
lc-messages-dir   = /usr/share/mysql
skip-external-locking
character-set-server=utf8
collation-server=utf8_general_ci
# skip-grant-tables    <-- add # here

  再返回终端重启mysql服务,而后输入mysql -u root -p,密码输入步骤2中设置的密码,回车后应该就可以进入数据库了,如果不行,转到步骤4。

4、可能遇到的问题

  发现在经过步骤3之后,还是会报之前的错误,此时参照步骤3,将注释的那条语句取消注释(删除’#'号),重启mysql后重新进入mysql。而后选择数据库mysql use mysql;,然后输入select user,plugin from user;如下图所示:

  从图中可以看到在执行了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退出,再执行步骤3就可以了(这里注意不要手欠执行flush privileges;到这里无需刷新权限,不然可能导致失败)。
  MYSQL默认是区分大小写的,若想取消掉,可以按照上述方法找到并打开mysqld.cnf,然后在该配置文件中的[mysqld]标签下最后一行加入`lower_case_table_names = 1`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值