2MUCH

Mysql修改root密码

2022-12-04


Mysql修改root密码

背景:linux系统,忘记mysql的root密码,该怎么修改root密码?

复制阿里云的在线服务中提出的解决方案👇。亲测ok

如果忘记了MySQL数据库root用户的密码,可以通过修改配置文件,登录时跳过密码,然后在数据库里面修改密码。一般数据库默认的用户为root。

  1. 执行如下命令,编辑MySQL数据库的my.cnf配置文件。

    vim /etc/my.cnf
    

    说明:my.cnf配置文件的路径以实际环境为准。

  2. 在[mysqld]字段下新增如下内容,然后保存退出。

    skip-grant-tables
    
  3. 执行如下命令,重启MySQL服务。

    /etc/init.d/mysqld restart
    

    说明:MySQL启动脚本路径以实际环境为准。

  4. 执行如下命令,登录数据库。

    /usr/bin/mysql
    

    说明:MySQL命令路径以实际环境为准。

  5. 依次执行如下SQL语句,更新密码。

    USE mysql;
    UPDATE user SET authentication_string = password ('[$Password]') WHERE User = 'root';
    flush privileges;
    quit
    

    说明:[$Password]为新密码,不建议新密码为“123456”,此密码太简单,密码需要满足密码复杂性要求,需要大小写字母和数字组合,最小长度为8位,根据此密码策略,设置密码。

  6. 再次编辑/etc/my.cnf配置文件,删除或者注释第2步添加的skip-grant-tables。 img

  7. 执行如下命令,重启MySQL服务。

    /etc/init.d/mysqld restart
    
  8. 使用新密码登录数据库,确认能正常登录。

这里有个注意点

user表中,可能有两个字段表示用户密码的(Password和authentication_string)。根据mysql的版本不同,可能用前者或是后者来存储登陆密码。比如我的mysql版本是:

mysql> select version();
+------------+
| version()  |
+------------+
| 5.6.50-log |
+------------+
1 row in set (0.00 sec)

最开始我是用上述解决方案中的语句设置authentication_string字段:

UPDATE user SET authentication_string = password ('[$Password]') WHERE User = 'root';

发现设置完还是登陆不了。后面就试着把Password字段也设置下,才可以使用新密码登陆:

UPDATE user SET Password = password ('[$Password]') WHERE User = 'root';