MySQL无法修改root密码

By | 2019/04/20

困扰我数小时的一个小问题,本来MySQL装了没有100也有80次了,本以为做什么都轻车熟路,但随着版本日新月异,越来越多的特性实在让人防不胜防。

在最新的Ubunut 18.04 LTS上使用apt install mysql-server,安装好以后,意外发现没有让我输入root的密码,记得之前都会有prompt让给一个root的初始密码的。待装好了,发现确实不用密码就能登录,于是习惯性的使用ALTER USER USER() IDENTIFIED BY 'new-password'希望能重置密码,然而,没有反应,flush priviliges什么的就不用说了,使用UPDATE user SET authentication_string = PASSWORD('new-password')也是不行,反正我永远可以免密码登录。

奇了怪了,而我在修改mysql 的 datadir 的时候也发现了问题,新的路径mysqld无法写入,chmod, chown啥的也没有效果,后来在syslog中发现了端倪,apparmor阻止了读写,记得之前也没有默认启用这个啊,是阿里云帮我们启用的吗?本想把apparmor一关了事,但是想想为了安全,还是修改配置吧。

回到密码,最后还是在别人的blog上发现了问题 https://www.percona.com/blog/2016/03/16/change-user-password-in-mysql-5-7-with-plugin-auth_socket/

原来, 5.7之后起,如果安装mysql的时候没有给root指定密码,那么就会启用auto_socket的插件,这样只要你的系统账号是root,就可以免密登录了(通过unixsocket),修改密码的方式必须是这样:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new-password';

One thought on “MySQL无法修改root密码

发表评论

电子邮件地址不会被公开。 必填项已用*标注