Windows下MySQL忘记root密码的两种解决办法

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)
公众号:老苏畅谈运维
欢迎关注本人公众号,更多精彩与您分享。

方法1:
对于忘记MySQL root用户密码,常规的解决方法是启动的时候加 skip-grant-tables 选项,在绕过密码认证之后,进入MySQL数据库系统,以便进行修复或重置密码等操作。

在window下,怎么操作呢,接下来为您介绍。
1、window下关闭MySQL相关服务
打开cmd窗口,我这里MySQL服务名称设置为了MySQL8031,所以这里是 net stop mysql8031
在这里插入图片描述
2、重新启动MySQL
用下面的命令启动MySQL服务

C:\Users\Administrator>cd /d D:\MySQL8031\bin

D:\MySQL8031\bin>mysqld --console --skip-grant-tables --shared-memory

通过mysqld --console --skip-grant-tables --shared-memory 启动可以跳过密码验证
在这里插入图片描述

3、打开另外一个cmd窗口登录MySQL

C:\Users\Administrator>cd /d D:\MySQL8031\bin

D:\MySQL8031\bin>mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 8.0.31 MySQL Community Server - GPL

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

4、设置新的root密码

update mysql.user set authentication_string='' where user='root';
flush privileges;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';

在这里插入图片描述
5、关闭上述终端,重新启动mysql

net start mysql8031

在这里插入图片描述
这样就可以用修改后的密码登录进去了

C:\Users\Administrator>cd /d D:\MySQL8031\bin\

D:\MySQL8031\bin>mysql -uroot -proot
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.31 MySQL Community Server - GPL

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

方法2:
接下来,介绍另外一种更简单的方式。
新建一个newpass.txt文件(可以将它放在my.ini同目录)文件内容为:

ALTER user root@'localhost' identified by 'root';

关闭MySQL服务:

net stop mysql8031

在这里插入图片描述
用下面的命令启动MySQL服务:
D:\MySQL8031\bin\mysqld.exe --defaults-file=“D:\MySQL8031\my.ini” --init-file=“D:\MySQL8031\newpass.txt”

具体的my.ini文件和newpass.txt文件要改成实际的位置
命令执行后界面没有变化执行下一步。

在这里插入图片描述

按Ctrl+C终止运行,并重新启动Windows服务
在这里插入图片描述
关注我,学习更多的数据库知识
请添加图片描述

<think>我们正在处理一个关于在Windows系统上重置MySQLroot密码的问题。用户提供了三个引用,这些引用描述了不同的方法,但需要注意的是,不同MySQL版本(如5.5和8.0)的方法可能不同。因此,我们需要考虑版本差异,并给出通用且清晰的步骤。根据引用[1]和引用[3],我们可以总结出两种主要情况:MySQL5.7及以下版本和MySQL8.0及以上版本。因为引用[3]详细描述了MySQL5.5的步骤,而引用[1]提到了MySQL8.0以上的重置方法。我们将步骤分为两部分:一部分适用于MySQL5.7及以下版本,另一部分适用于MySQL8.0及以上版本。但是,首先我们需要确认MySQL的安装路径和服务名,因为不同的安装方式(如安装为服务)可能需要不同的服务名。常见的服务名是"mysql",但有时也可能是"MySQL80"(对于MySQL8.0)或其他。步骤概览:1.停止MySQL服务。2.以跳过权限表的方式启动MySQL(无验证模式)。3.连接到MySQL服务器。4.修改root密码(不同版本修改密码的SQL语句不同)。5.停止无验证模式的MySQL服务,然后正常启动。注意:所有操作都需要以管理员权限运行命令提示符(cmd)。下面详细说明:步骤1:确认MySQL服务名-打开命令提示符(管理员),输入:`scquerytype=service|findstr"mysql"`-或者,在服务管理器中查找MySQL服务名。步骤2:停止MySQL服务-命令:`netstop<服务名>`-例如:`netstopmysql`或`netstopMySQL80`步骤3:以无验证方式启动MySQL-注意:这一步需要在一个新的命令提示符窗口中保持运行,我们通常使用`mysqld`或`mysqld-nt`命令,并加上`--skip-grant-tables`参数。-但是,由于我们还需要执行后续步骤,所以通常我们会让这个窗口在后台运行,然后打开另一个命令提示符窗口进行操作。然而,引用[3]提到,在停止服务后,直接使用`mysqld--skip-grant-tables`启动,然后新开一个窗口进行操作。操作完成后,需要结束`mysqld.exe`进程。为了避免混淆,我们将步骤重新整理如下:方法一:适用于MySQL5.7及以下版本(使用password函数)方法二:适用于MySQL8.0及以上版本(使用新的身份验证方式,密码字段可能有变化)由于用户没有提供具体版本,我们将分别说明两种方法。详细步骤(以MySQL5.7及以下版本为例):1.以管理员身份打开命令提示符。2.停止MySQL服务:`netstopmysql`(如果服务名是mysql,否则替换为你的服务名)3.输入命令:`mysqld--skip-grant-tables`此时,当前窗口会处于“挂起”状态,不要关闭它。4.以管理员身份再打开一个新的命令提示符窗口,输入:`mysql-uroot`连接到MySQL服务器。5.在mysql>提示符下,输入以下命令:usemysql;updateusersetpassword=password('你的新密码')whereuser='root';flushprivileges;quit;6.关闭第一个命令提示符窗口(或者按Ctrl+C终止mysqld进程),然后回到第二个窗口(或者再开一个管理员命令提示符)启动MySQL服务:`netstartmysql`但是,对于MySQL8.0及以上版本,由于`password`函数被移除,且身份验证插件可能为`caching_sha2_password`,所以修改密码的方式不同。详细步骤(MySQL8.0及以上版本):1.停止MySQL服务:`netstopMySQL80`(服务名可能是MySQL80)2.使用`--skip-grant-tables`和`--shared-memory`(或者有时不需要)启动MySQL服务(注意:在MySQL8.0中,也可以使用`--console`以便在控制台看到输出):mysqld--console--skip-grant-tables--shared-memory3.打开另一个命令提示符,使用`mysql-uroot`连接。4.在mysql>提示符下,先刷新权限:`flushprivileges;`5.修改root密码(注意:MySQL8.0中user表的密码字段已改为`authentication_string`,且不再使用password函数):ALTERUSER'root'@'localhost'IDENTIFIEDBY'你的新密码';或者,如果遇到问题,可以先清空密码再设置(但通常不需要):updateusersetauthentication_string=''whereuser='root';flushprivileges;ALTERUSER'root'@'localhost'IDENTIFIEDBY'你的新密码';6.刷新权限:`flushprivileges;`7.退出:`quit;`8.关闭第一个窗口(停止mysqld进程),然后重启MySQL服务:`netstartMySQL80`注意:在MySQL8.0中,如果使用`--skip-grant-tables`,可能会在修改密码时遇到错误,因为此时服务器处于无权限表加载状态。所以,在修改密码前执行`flushprivileges`很重要,这样可以让权限表重新加载(尽管在跳过权限表的情况下,这个操作也会让一些权限表生效)。另外,引用[1]中提到,对于新手可能遇到的问题(如服务名无效、无法进入bin目录)的解决方法:-服务名无效:需要确认服务名,可以通过“服务”管理工具查看,或者在命令提示符中使用`scquerytype=service|findstr"mysql"`来查找。-无法进入bin目录:如果MySQL的bin目录没有添加到系统环境变量PATH中,则需要先进入MySQL安装目录下的bin目录,再执行命令。例如:cdC:\ProgramFiles\MySQL\MySQLServer8.0\bin因此,我们给出一个更通用的步骤,包括如何进入bin目录(如果必要的话):通用步骤(以MySQL8.0为例):1.打开命令提示符(管理员)。2.停止服务:`netstopMySQL80`3.进入MySQL的bin目录(如果已经配置环境变量则不需要):cdC:\ProgramFiles\MySQL\MySQLServer8.0\bin注意:具体路径根据你的安装位置调整。4.启动无验证模式:`mysqld--console--skip-grant-tables--shared-memory`5.打开新的命令提示符(管理员),同样进入bin目录(如果需要),然后运行:`mysql-uroot`6.在mysql客户端中执行:flushprivileges;ALTERUSER'root'@'localhost'IDENTIFIEDBY'new_password';--将new_password替换为你的新密码flushprivileges;quit;7.回到第一个命令提示符窗口,按Ctrl+C停止mysqld进程。8.重启服务:`netstartMySQL80`注意:在步骤4中,使用`--console`是为了将日志输出到控制台,方便查看;`--shared-memory`是用于共享内存连接(Windows平台)。如果不需要控制台输出,可以去掉`--console`。如果上述步骤中,使用`ALTERUSER`报错,可以尝试先清空authentication_string字段,然后再设置密码(但这种方法可能不安全,仅用于重置):usemysql;updateusersetauthentication_string=''whereuser='root';flushprivileges;quit;然后停止无验证模式,正常启动服务,再使用`mysql-uroot`登录(此时无密码),再使用`ALTERUSER`设置密码。但是,在MySQL8.0中,推荐使用`ALTERUSER`语句。总结:用户需要根据自己安装的MySQL版本选择合适的方法。最后,我们生成相关问题:1.如何确定MySQL的版本?2.如何查找MySQL的安装路径?3.重置密码后仍然无法登录怎么办?</think>### Windows系统重置MySQL root密码指南 以下是针对不同MySQL版本(5.7及以下/8.0及以上)的密码重置步骤,请根据您的MySQL版本选择操作: #### 🛠 通用准备步骤 1. **以管理员身份运行命令提示符** Win+S搜索`cmd` > 右键选择"以管理员身份运行" 2. **确认MySQL服务名** ```bash sc query type= service | findstr "mysql" ``` 常见服务名:`mysql`(5.7及以下)或 `MySQL80`(8.0+) --- ### 🔄 方法一:MySQL 5.7及以下版本 ```mermaid graph TD A[停止MySQL服务] --> B[无验证模式启动] B --> C[登录数据库] C --> D[修改root密码] D --> E[重启服务] ``` 1. **停止MySQL服务** ```bash net stop mysql ``` 2. **无验证模式启动** ```bash mysqld --skip-grant-tables --shared-memory ``` *保持此窗口运行* 3. **新窗口登录数据库** ```bash mysql -u root ``` 4. **修改密码** ```sql USE mysql; UPDATE user SET password=PASSWORD('你的新密码') WHERE user='root'; FLUSH PRIVILEGES; EXIT; ``` 5. **重启服务** ```bash taskkill /f /im mysqld.exe net start mysql ``` --- ### ⚡ 方法二:MySQL 8.0及以上版本 ```mermaid graph LR F[停止服务] --> G[初始化文件] G --> H[启动服务] H --> I[获取临时密码] I --> J[修改密码] ``` 1. **停止服务** ```bash net stop MySQL80 ``` 2. **创建初始化文件** 新建`C:\\mysql-init.txt`,内容: ```sql ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码'; ``` 3. **无验证启动** ```bash mysqld --init-file=C:\\mysql-init.txt --console ``` 4. **重启服务** ```bash net start MySQL80 ``` 5. **验证登录** ```bash mysql -u root -p ``` --- ### ⚠️ 常见问题解决 1. **服务名无效** - 检查服务名:`services.msc` > 查找MySQL服务 - 使用完整路径: ```bash "C:\\Program Files\\MySQL\\MySQL Server 8.0\\bin\\mysqld" --skip-grant-tables ``` 2. **权限错误** - 确保使用管理员CMD - 关闭杀毒软件临时权限限制 3. **修改密码失败**(MySQL 8.0+) 改用命令: ```sql ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码'; ``` > 提示:操作完成后建议删除`mysql-init.txt`文件[^1][^3] --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老苏畅谈运维

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值