MySQL忘记ROOT密码怎么办


背景

最近有一个网站使用了MySQL作为数据库,但是由于是很久之前部署的数据库,结果忘记了admin的密码。 经过一番折腾,发现可以通过修改mysql的配置来绕过权限验证,之后再修改mysql root用户的密码,所以记录一下,方便后续查阅。 具体流程如下:

流程

1. 修改my.conf

在[mysqld]的section中加上一行配置: skip-grant-tables 例如:

[mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    skip-name-resolve
    skip-grant-tables

修改完毕后,保存退出。

2. 重启mysqld

使用命令: /etc/init.d/mysqld restart 来重启mysql服务 例如:

/etc/init.d/mysqld restart

Stopping MySQL: [ OK ]
Starting MySQL: [ OK ]

3. 登录并修改MySQL的root密码

/usr/bin/mysql

mysql > USE mysql;
mysql > UPDATE user SET Password = password ( ‘new-password’ ) WHERE User = ‘root’ ;
mysql > flush privileges ;
mysql > quit

如果是mysql5.7以上版本,需要这么做:

/usr/bin/mysql

mysql > USE mysql;
mysql > UPDATE user SET authentication_string=password ( ‘new-password’ ) WHERE User = ‘root’ ;
mysql > flush privileges ;
mysql > quit

执行完毕后,即可用'new-password'来登录MySQL了。

验证

  1. 在my.conf中去掉skip-grant-tables的配置并重启mysql
  2. 使用新的root密码来登录mysql,如果登录成功,则表示密码修改成功。