MySQL8.0 以后数据库修改密码策略做了变更,在安装数据库的时候没有设置密码环节了,而是在初次启动的时候在 /var/log/mysql/error.log 日志文件中生成一个随机的临时密码。如果你不小心把日志文件删除了或者忘记了密码,我们就需要进行重置密码操作。

介绍

我们需要知道的是密码存储在MySQL数据库的 users 表中。我们只需要绕过 MySQL 身份认证,登录到服务端然后更新 user 表记录即可。

跳过验证启动

先停止现有的 MySQL 服务:

sudo service mysql stop

通过以上命令进行停止服务,通过跳过验证来更改配置文档 /etc/mysql/mysql.conf.d/mysqld.cnf 在文档末尾添加 skip-grant-tables 配置:


1. max_binlog_size = 100M
2. # binlog_do_db = include_database_name
3. # binlog_ignore_db = include_database_name
4. #
5. #
6. skip-grant-tables

接下来重新启动 MySQL 服务:

sudo service mysql start

重置密码

现在我们可以直接在终端输入 MySQL 命令登录服务端了。

我们需要将 user 表的 auth_socket 插件换成 mysql_native_password, 否则待会执行更新 password 语句的时候会报错 Plugin ‘auth_socket’ is not loaded:

update  user set  `plugin`='mysql_native_password'  WHERE `user`='root' AND `host`='localhost'

更改 root 用户密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_passowrd';

还原配置我们再次修改刚才修改的配置文件即可,删除 skip-grant-tables 选项,然后重启 MySQL 服务:


1. sudo service mysql stop
2. sudo service mysql start

通过上面我们已经可以正常修改代码了,如果修改不成功可以尝试关闭数据库:


1. mysqld_safe 语法介绍
2. --skip-grant-tables #跳过授权表
3. --skip-networking #跳过远程登录
4. 示例:
5. mysqld_safe --skip-grant-tables --skip-networking & 

重启服务之后,你就可以使用新密码登录了。

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!