mysql 5.7 忘记密码

本文详细介绍了如何在MySQL 5.7.26版本中,通过临时禁用权限表检查来重置root用户的密码。步骤包括修改my.cnf配置文件、重启服务、更新root用户密码并重新启用权限检查。
mysql 版本:5.7.26
  1. 编辑/etc/my.cnf,在[mysqld]下增加一条skip-grant-tables
  2. 保存mysql配置文件,重启mysql服务systemctl restart mysqld
  3. 在终端输入mysql,回车
  4. 在mysql命令行里执行UPDATE mysql.user SET authentication_string=PASSWORD('newpassword') WHERE user='root';
  5. 在mysql命令行里执行flush privileges;
  6. 去掉/etc/my.cnf文件里[mysqld]下的skip-grant-tables
  7. 保存mysql配置文件,重启mysql服务systemctl restart mysqld
  8. 使用新密码登录mysql:mysql -uroot -pnewpassword
  9. 登陆之后,执行show databases;,会提示让你重新改密码
  10. 执行alter user 'root'@'%' identified by 'newpassword.';
  11. 执行flush privileges; ,完成更改
<think>嗯,用户需要解决MySQL 5.7忘记密码的问题。根据引用内容,Windows和Linux的解决方法有所不同,需要分平台整理。 用户明确要求MySQL 5.7版本,引用[1][2][3]都提到了关键命令`update mysql.user set authentication_string=password('新密码') where user='root'`。但要注意引用[1]特别指出5.7版本必须使用authentication_string字段,这点需要重点强调。 Linux部分参考引用[4]的完整流程:修my.cnf→重启服务→免密登录→密码→删除配置→重启。用户可能不熟悉vi操作,需要补充`:wq!`这样的细节命令。 安全方面要提醒用户密码后必须删除skip-grant-tables配置,否则会留后门。另外所有引用都提到要flush privileges刷新权限,这个步骤不能遗漏。 用户没有说明操作系统,所以要把Windows和Linux方案都列出来。引用[1]的Windows方案提到要开两个CMD窗口的细节很实用,包括旧窗口会失效的注意事项,这些都要保留。 最后考虑补充两个常见问题:如果遇到"unknown column password"错误说明版本不对;服务名不一定是mysql可能是mysqld。这样能覆盖用户可能遇到的意外情况。 </think>以下是针对 **MySQL 5.7 忘记 root 密码**的详细解决方案,分 **Windows** 和 **Linux** 系统说明: --- ### 🔧 **Windows 系统解决方案** #### 步骤 1:关闭 MySQL 服务 1. 按 `Win+R` 输入 `services.msc`,找到 `MySQL` 服务 → 右键选择 **停止**。 2. 以**管理员身份**打开 `cmd`,进入 MySQL 的 `bin` 目录: ```cmd cd C:\Program Files\MySQL\MySQL Server 5.7\bin ``` #### 步骤 2:跳过权限验证启动 ```cmd mysqld --skip-grant-tables ``` > **注意**:此窗口会持续运行,需**另开一个新的 cmd 窗口**继续操作。 #### 步骤 3:重置密码 1. 在新 `cmd` 窗口进入 `bin` 目录,连接 MySQL: ```cmd mysql -u root ``` 2. 执行以下 SQL 语句(替换 `123456` 为新密码): ```sql USE mysql; UPDATE user SET authentication_string=PASSWORD("123456") WHERE user='root'; FLUSH PRIVILEGES; EXIT; ``` > 🔑 **关键点**: > - MySQL 5.7 密码字段为 `authentication_string`(非旧版 `password`)[^2][^3]。 #### 步骤 4:重启服务 1. 终止第一个 `cmd` 窗口的进程(按 `Ctrl+C`)。 2. 重启服务: ```cmd net start mysql ``` --- ### 🐧 **Linux 系统解决方案** #### 步骤 1:修配置文件 ```bash sudo vim /etc/my.cnf ``` 在 `[mysqld]` 段落下添加: ```ini skip-grant-tables ``` 保存退出(`:wq!`)。 #### 步骤 2:重启 MySQL 并免密登录 ```bash sudo systemctl restart mysqld mysql -u root # 无需密码 ``` #### 步骤 3:重置密码 ```sql UPDATE mysql.user SET authentication_string=PASSWORD('新密码') WHERE user='root' AND Host='localhost'; FLUSH PRIVILEGES; EXIT; ``` #### 步骤 4:恢复配置并重启 1. 删除 `/etc/my.cnf` 中的 `skip-grant-tables`。 2. 重启服务: ```bash sudo systemctl restart mysqld ``` --- ### ️ **注意事项** 1. **密码字段**: MySQL 5.7+ 必须使用 `authentication_string` 字段更新密码[^2][^3][^4]。 2. **安全风险**: 操作完成后**务必删除 `skip-grant-tables`**,否则数据库将处于无密码状态。 3. 若遇到 `ERROR 1820`,需先执行: ```sql ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'; ``` --- ### ❓相关问题 1. MySQL 8.0 忘记密码的解决步骤与 5.7 有何不同? 2. 如何避免频繁忘记数据库密码?推荐哪些密码管理工具? 3. 跳过权限表 (`skip-grant-tables`) 启动 MySQL 的安全隐患有哪些? > 参考资料: > [^1]: Windows 下密码重置流程 > [^2][^3]: MySQL 5.7 密码字段更新语法 > [^4]: Linux 系统配置文件操作指南 > [^5]: 第三方技术博客补充方案
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值