ubuntu版本:18.04 mysql版本:5.7.24
ubuntu安装mysql后用root账户登入会出现问题:ERROR 1698 (28000): Access denied for user 'root'@'localhost'
可能是因为初始密码为空;按空格回车后还是报一样的错
这样就只能使用debian-sys-maint账户修改root账户密码了。
debian-sys-maint账户是安装mysql时系统自动生成的mysql用户,debian和ubuntu系统都会这样做,
停止或重启服务都靠它,删除它就无法重启或者雷霆之服务。 如果你修改了它的密码或覆盖掉密码,也会出现错误: error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)'
1 查看debian-sys-maint账户密码:
debian-sys-maint账户是安装mysql时系统自动生成的,密码随机生成。
终端输入: sudo vim /etc/mysql/debian.cnf
password就是密码,如果是复制密码由后面使用,切忌不要将密码字符串后面的空格也复制进去,否者后面粘贴密码登入账户时会出现错误。
2 用刚才查看的密码登入debian-sys-maint账户:
终端输入指令:mysql -u debian-sys-maint -p ,然后输入刚才查看的debian-sys-maint账户密码。 注意-u可以和debian-sysy连在一起,-p不能。u表示用户名,p表示密码。
3 进入mysql后重新设置root账号密码:
sql指令:
use mysql (一定要写上这条语句,很多网上的解决方案缺少这条语句,导致后一条语句出现no database selected错误,这是因为有选择新创建的表所在的数据库)
UPDATE user SET authentication_string=PASSWORD('你的密码') where USER='root';
5.7之前的版本用:
update user set password=PASSWORD("你的密码") where User = 'root';
指令的大小写都行,注意语句后面分号。
退出mysql(sql指令:quit)并重启mysql(终端指令:sudo service mysql restart)
这时候用root账户和修改后的密码登入时(终端指令:mysql -uroot -p)会发现还是报错!这时候其实密码是修改成功的,但是plugin root 的字段是auth_socket,需要修改过来。
4 修改plugin root
查看plugin root
用debian-sys-maint账户和密码登入mysql,然后输入sql语句:
use mysql
select user,plugin from user;
修改plugin root
update user set authentication_string =password('你的密码'),plugin='msyql_native_password' where user='root';
然后推出并重启mysql,再用root账户登入就可以了。
总结:
1 这篇文章是遇到这个问题后查找网上资料整合而成的,网上关于这个问题的资料很多但是也有很多不足:比如指令不够详细,尤其是很多资料缺少使用mysql时需要use mysql这个指令的提示,这对小白用户不太友好。再一个,大部分相关文章缺少修改plugin root的部分,所以我折腾了很多遍修改密码但还是不成功。
2 很多时候问题的原因只是一个很小的错误,比如少一个分号,空格,复制密码吧后面的换行符也复制进去了等,所以,尽量减少操作失误。
3 遇到问题多分析反馈的错误原因
4 网上的资料很多,但终究是别人的,不一定能解决自己的问题(但可以提供解决问题思路),遇到问题多查找相关资料,找解决办法,这个过程可能很花费时间很烦人,但是也能拓展不少知识,最后总结理解就能成为自己的东西。 |