重置MySQL的root密码

介绍

MySQL 提供了可以用来重置root密码的启动选项。可以在mysql 启动的初始化阶段重新设置root密码, 也可以禁用权限管理系统后修改系统用户数据中的root密码。前一种方法的安全隐患较小,也是本文 会举例介绍的。

MySQL 5.5 ( 以及 5.6)提供了启动选项 init-file。在启动的初始化阶段,会读取并执行该文件中的 SQL语句。利用这一机制,执行设置密码的语句,就能解决我们的问题。

步骤

首先,准备init-file reset_root.sql, 内容如下。注意: 新的密码请记得使用你自己的密码,而不要直接使用下面 代码中的这个。

set password for 'mysql'@'localhost' = password('MySecretSince2017');

然后,将该文件放到mysql进程能读取的, 安全的目录

sudo mkdir /var/dbops
sudo mv reset_root.sql /var/dbops/
sudo chown -R mysql:mysql /var/dbops
sudo chmod 700 /var/dbops

接下来,修改启动选项,在 my.cnf的 mysqld段下加入 init-file,

...
[mysqld]
...
init-file = /var/dbops/reset_root.sql

这时我们就可以重启服务,

sudo service mysql restart

新的密码就重置成功了, 用新密码验证一下,

mysql -uroot -p  -e "select 1"

最后,记得从配置文件中注释掉 init-file 选项,并删除 reset_root.sql。还要记得妥善保管密码。

总结

我们利用mysql的init-file选项执行了设置密码的语句,从而重置了root密码。由于root密码十分敏感, init-file需要设置为最小的访问权限,使用完毕后记得删除该文件,并禁用init-file选项。