在Linux中重置MySQL 5.7的root密码,可以通过以下步骤来完成:
一、停止MySQL服务
首先,你需要停止MySQL服务。这可以通过系统服务管理器(如systemd)来完成。在终端中输入以下命令:
systemctl stop mysqld.service
二、以无密码模式启动MySQL
接下来,你需要以无密码模式启动MySQL,以便能够绕过密码验证来重置root密码。这可以通过修改MySQL的配置文件(通常是/etc/my.cnf
或/etc/mysql/my.cnf
)来实现,或者通过命令行参数来启动mysqld服务。
修改配置文件
使用文本编辑器打开MySQL的配置文件
vim /etc/my.cnf
在[mysqld]
部分下添加一行
skip-grant-tables
保存并关闭文件。
:wq
重启MySQL服务:
systemctl start mysqld.service
三、登录MySQL并重置root密码
现在,MySQL正在以无密码模式运行,你可以使用以下命令以root用户身份登录MySQL(不需要密码):
mysql -u root
登录后,选择mysql数据库,并重置root用户的密码。在MySQL 5.7中,password
字段已被重命名为authentication_string
,并且应该使用ALTER USER
语句或UPDATE
语句配合PASSWORD()
函数(尽管在MySQL 5.7.6及更高版本中PASSWORD()
函数已被弃用,但在此上下文中仍可使用,或者直接赋值加密后的密码字符串)来更新密码。然而,为了兼容性和清晰性,这里展示使用UPDATE语句的方法:
FLUSH PRIVILEGES;
USE mysql;
UPDATE user SET authentication_string=PASSWORD('你的新密码') WHERE User='root';
FLUSH PRIVILEGES;
注意:由于PASSWORD()函数在MySQL 5.7.6及更高版本中已被弃用,建议直接使用加密后的密码字符串(如通过SELECT PASSWORD('你的新密码');生成,但在重置密码时通常不需要此步骤,因为你可以直接设置加密后的密码字符串),但出于示例目的,这里仍展示了PASSWORD()的用法。实际上,你应该直接设置authentication_string为加密后的密码,或者如果你使用的是MySQL 5.7.6或更高版本,可以使用ALTER USER语句并省略PASSWORD()函数。
然而,更推荐的方法是使用ALTER USER
语句,因为它更清晰且不受弃用警告的影响:
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
FLUSH PRIVILEGES;
四、恢复MySQL的正常启动模式
重置密码后,你需要恢复MySQL的正常启动模式,即移除或注释掉配置文件中添加的skip-grant-tables
行
再次打开MySQL的配置文件。
注释掉或删除skip-grant-tables
行。
保存并关闭文件。
重启MySQL服务:
systemctl restart mysqld.service
五、验证新密码
最后,尝试使用新密码登录MySQL,以确保密码已正确重置:
mysql -u root -p
输入你的新密码进行验证。
但是有时候会遇到这种问题
这种问题怎么解决呢
我们先通过无验证的方式去登录一下
然后通过下面的语句查询一下
select User, password_expired, authentication_string, Host from user;
然后设置为不过期
UPDATE user SET password_expired='N' WHERE User='root';