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 配置:
max_binlog_size = 100M # binlog_do_db = include_database_name # binlog_ignore_db = include_database_name # # 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 服务:
sudo service mysql stop sudo service mysql start
四,通过上面我们已经可以正常修改代码了,如果修改不成功可以尝试以下方式:
以上步骤需要关闭数据库
mysqld_safe 语法介绍 --skip-grant-tables #跳过授权表 --skip-networking #跳过远程登录 示例: mysqld_safe --skip-grant-tables --skip-networking &
重启服务之后,你就可以使用新密码登录了。