之前一直以为 MySQL 中如果忘记了 root 账号的密码,只有一种解法: -skip-grant-tables

相对于 skip-grant-tables 方案,我们来看看另外一种更优雅的解法,其只会重启一次,且基本上不存在安全隐患。

首先是关闭实例

其次,创建一个sql文件,并写上密码修改语句:

# vim init.sql 
alter user 'root'@'localhost' identified by '123456';

最后,使用 --init-file 参数,启动实例

# bin/mysqld_safe --defaults-file=my.cnf --init-file=/usr/local/mysql57/init.sql &

实例启动成功后,密码即修改完毕。

如果mysql实例是通过服务脚本来管理的,除了创建sql文件,整个操作可简化为一步。

# service mysqld restart --init-file=/usr/local/mysql57/init.sql 

注意:该操作只适用于/etc/init.d/mysqld 这种服务管理方式,不适用于 RHEL 7 新推出的 systemd