适用于mysql 5.7.8及以上版本。
Step 1 - 停止数据库服务
1
|
$ sudo systemctl stop mysql
|
Step 2 - 绕过授权检查重置密码
停止加载用户权限信息的授权表,以及停用网络连接,防止其他用户登录。
1
|
$ sudo mysqld_safe --skip-grant-tables --skip-networking &
|
之后切换到其他终端,若上一步有报错提示:
1
|
mysqld_safe Directory ‘/var/run/mysqld’ for UNIX socket file don’t exists
|
解决方案如下:
1
2
|
$ sudo mkdir /var/run/mysqld
$ sudo chown mysql:mysql /var/run/mysqld
|
Step 3 - 用客户端连接到mysql
若之前的步骤不出问题的话,接下来应该就能看到mysql 的提示符了
Step 4 - 重置Root密码
1
2
3
4
|
mysql > use mysql;
mysql > update user set authentication_string=password('new_password') where user='root' ;
mysql > flush privileges;
mysql > quit
|
注意每条命令后以";“结尾(quit除外),另外,在旧版的MySQL(mysql 5.7.6及以下)中,authentication_string
字段可能为password
,要注意区别。
Step 5 - 停止MySQL服务,并重启
停止先前创建的mysqld_safe
服务,重新打开mysql
服务并检验密码更改是否成功。
1
|
$ sudo systemctl start mysql
|
输入新设置的密码后登录。
参考来源
- 来源1
- 来源2