[MySQL] - Linux MySQL忘记root密码解决方法

MySQL8 忘记 root 密码解决方法

1、找到 my.cnf 文件

MySQL 配置文件默认是在 /etc/my.cnf,如果没有可以使用命令 find / -name my.cnf 查找。

编辑该配置文件,在 [mysqld] 下随便一行添加 skip-grant-tables 如下所示:

[mysqld]
user=mysql
default-storage-engine=INNODB
character-set-server=utf8
default-authentication-plugin=mysql_native_password
skip-grant-tables
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

完成后保存。

2、重启 mysql

输入命令 service mysqld restart 重启 mysql 服务以使配置生效。

3、进入 mysql 命令行模式
此时已经可以免密登录到 mysql,输入命令:mysql -uroot -p,然后直接按回车即可进入 mysql 命令行,如下所示:

root@77792ef1f62:/# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.

4、更新 root 密码
首先切换到 mysql 库,使用命令:use mysql

其次更新 root 账户的密码,将其设置为空:update user set authentication_string = '' where user = 'root'

完整过程如下所示:

mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> update user set authentication_string = '' where user = 'root';
Query OK, 2 rows affected (0.01 sec)
Rows matched: 2  Changed: 2  Warnings: 0

5、恢复 my.cnf 配置文件
将 1 步骤添加的 skip-grant-tables 去掉,然后再重启 mysql,此时 root 密码已被我们修改成空了。

修改 MySQL 密码

不能直接使用 update 来更新密码,而需要使用 mysql 自带的命令生成加密的密码,修改密码的命令如下:

SET PASSWORD FOR 'root'@'%' = 'yourpassword';

yourpassword 即新密码。

'root'@'%' 表示该账户允许所有的主机访问,本地访问将 % 改为 localhost。

参考:[MySQL] - 允许 root 远程访问

讨论

还没有人评论~