MySQL 5.7忘记或修改root密码的正确方法
当忘记MySQL 5.7及更高版本的root密码时,可通过进入免授权验证的安全模式来重置密码。主要操作包括停止服务、启动参数配置、更新用户表中的认证字段并刷新权限。此过程能有效解决因密码丢失导致的管理权限问题。
准备条件与风险提示
在操作前,请确保拥有服务器的 root 访问权限,因为需要执行系统级命令来控制 MySQL 服务的启停。修改密码涉及对核心用户表的直接写入操作,若操作不当可能导致权限混乱或服务无法启动。
重要提醒:在进行任何数据库维护操作之前,强烈建议先备份 mysql.user 表或整个数据库数据,以防误操作造成不可逆的损失。
第1步:停止当前运行的 MySQL 服务
目的:为了确保后续以非正常模式启动时不会与现有服务冲突。
入口/动作:使用终端连接到服务器,执行以下命令停止服务:
service mysql stop
完成状态:服务已成功关闭,端口释放。
第2步:以免授权验证模式启动 MySQL
目的:--skip-grant-tables 参数允许在没有密码验证的情况下登录数据库,从而绕过登录障碍进行修改操作。为减少安全风险,建议同时禁用网络监听 --skip-networking。
入口/动作:执行后台启动命令:
mysqld_safe --skip-grant-tables --skip-networking &
注意:此处必须使用 mysqld_safe 且需加 & 符号放入后台运行,而非直接使用前台服务命令。如果担心安全性但需允许本机连接,至少应包含 --skip-grant-tables。
第3步:无密码登录 MySQL 服务端
目的:进入数据库内部进行指令输入。
入口/动作:由于跳过了授权表检查,此时可直接回车或通过空密码登录:
mysql -uroot -p
出现 Enter password: 提示时,直接按回车键即可进入 mysql> 命令行界面。
第4步:更新 root 用户的认证信息
目的:修改账户的访问凭证。MySQL 5.7 版本中,密码存储字段已由旧版的 Password 变更为 authentication_string。
入口/动作:依次执行以下 SQL 语句:
- 选择数据库:
use mysql;
- 修改密码(将
'NewPass'替换为你要设置的新密码):update user set authentication_string=password('NewPass') where user='root' and Host = 'localhost'; - 刷新权限使更改生效:
flush privileges;
- 退出当前会话:
quit;
完成状态:数据库返回查询成功(Query OK)提示信息。
第5步:重启 MySQL 恢复正常服务模式
目的:重新加载授权表,恢复到正常的带验证的服务状态。
入口/动作:执行重启命令:
service mysql restart
完成后,可以使用新设置的密码尝试连接数据库。
替代方案:使用 ALTER USER 或 SET PASSWORD
如果在上述过程中遇到问题,或者你只是已知密码想要更换为新密码,可以在登录成功后直接使用标准 SQL 语句修改:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass';
-- 或者
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NewPass');
补充说明:对于较新的 MySQL 版本(如 8.0+),由于密码插件默认变为 caching_sha2_password,有时可能需要指定插件以确保兼容性。但在 5.7 环境中,使用 password() 函数通常已足够。
关于初始随机密码的处理
官方文档指出,MySQL 5.7 首次安装启动后,会在日志文件 /var/log/mysqld.log 或 /root/.mysql_secret 中生成一个临时随机密码。如果你持有该密码:
- 查看临时密码:
cat /var/log/mysqld.log | grep 'temporary password'
- 使用该密码登录后,立刻执行
ALTER USER修改为自定义密码。
以上就是MySQL 5.7忘记root密码及修改root密码的详细操作指南,更多关于数据库管理与维护的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









