目录
[问题2:执行ALTER USER命令报错1290](#问题2:执行ALTER USER命令报错1290)
[问题3:端口指定失败,提示"Can't connect to MySQL server on 'localhost'"](#问题3:端口指定失败,提示“Can't connect to MySQL server on 'localhost'”)
一、问题背景
在使用XAMPP搭建本地开发环境时,很多开发者会遇到MySQL/MariaDB的
root密码忘记,或执行登录命令时出现ERROR 1045 (28000): Access denied for user 'root'@'localhost'的权限错误。本文针对Windows系统下XAMPP环境,提供一套90 %生效的密码重置方案,覆盖各类登录失败、密码修改报错场景,新手也能轻松操作。常见报错场景
# 场景1:无密码登录被拒 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) # 场景2:skip-grant-tables模式下修改密码被拒 ERROR 1290 (HY000): The MariaDB server is running with the --skip-grant-tables option so it cannot execute this statement
二、核心原理
MySQL/MariaDB内置
--skip-grant-tables启动参数,使用该参数启动数据库时,会跳过所有权限验证,允许无密码登录root账号;登录后通过刷新权限表解除语句限制,再执行密码修改命令重置root密码,最后停止强制启动进程、恢复正常权限验证模式,完成整个重置流程。
三、前置准备
确认XAMPP安装路径(本文以
D:\software\AI\PHP\XAMP为例,实际操作时替换为自己的安装路径);确认MySQL端口(本文为修改后的
3307,默认端口为3306,端口不一致需全程对应修改);以管理员身份打开CMD(右键开始菜单→选择"命令提示符(管理员)",避免权限不足导致命令执行失败)。
配置Mysql文件,点击Config--->my.ini,在[mysqld]最后一行添加
skip-grant-tables
四、完整重置步骤(核心环节)
步骤1:彻底停止MySQL/MariaDB进程(关键前提)
关闭正在运行的XAMPP控制面板(若已打开);
按下
Ctrl+Shift+Esc组合键,打开任务管理器,切换到「详细信息」标签页;找到所有名称为
mysqld.exe的进程,右键选择「结束任务」,确保所有相关进程完全停止(若有残留,后续命令会执行失败)。
步骤2:强制启动MySQL并跳过权限验证
在管理员CMD窗口中,切换到MySQL的bin目录(路径替换为自己的XAMPP安装路径):
cd D:\software\AI\PHP\XAMP\mysql\bin
bashcd mysql\bin执行强制启动命令(指定端口,保持窗口后台运行)
bashmysqld --skip-grant-tables --port=3307 --console # 3307为自定义端口,若使用默认端口3306,替换为--port=3306即可注意:执行命令后,该CMD窗口会显示MySQL启动日志,全程不要关闭此窗口,关闭则MySQL进程会立即终止,导致后续操作无法进行。
步骤3:无密码登录MySQL/MariaDB
新打开一个普通CMD窗口(无需管理员权限),同样切换到MySQL的bin目录:
bash cd D:\software\AI\PHP\XAMP\mysql\bin执行登录命令(严格指定端口,区分大小写):
bashmysql -u root -P 3307成功登录提示:窗口会显示
MariaDB [mysql]>或mysql>提示符,说明无密码登录成功。步骤4:重置root密码(核心步骤,二选一)
切换到MySQL系统权限数据库(必须执行,否则无法修改密码):
bashUSE mysql刷新权限表(解除
skip-grant-tables模式的语句限制,否则修改密码会报错):
bashFLUSH PRIVILEGES执行密码重置命令(根据自己的数据库版本选择,推荐方案1,兼容性更强):
-- 方案1:MariaDB/MySQL 5.7+通用写法(推荐,本文优先使用)
bashSET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456') #PASSWORD中123456是新密码,也可以换成别的密码
方案2:MySQL 8.0+/MariaDB 10.4+兼容写法(若方案1报错,使用此方案)
bashALTER USER 'root'@'localhost' IDENTIFIED BY '123456' #BY中123456是新密码,也可以换成别的密码说明:将
123456替换为自己想要设置的新密码,建议设置简单易记的密码(仅本地开发环境使用)。密码重置成功提示:窗口会显示
Query OK, 0 rows affected (0.01 sec),说明修改成功。退出MySQL登录:
bashEXIT
步骤5:恢复MySQL正常启动模式
回到步骤2中打开的管理员CMD窗口(显示MySQL启动日志的窗口),按下
Ctrl+C组合键,停止强制启动的MySQL进程;打开XAMPP的MySQL配置文件:路径为
D:\software\AI\PHP\XAMP\mysql\bin\my.ini(用记事本或编辑器打开),检查并删除文件中可能添加的skip-grant-tables语句(若之前未添加,可直接跳过此步);打开XAMPP控制面板,点击「MySQL」模块的「Start」按钮,启动MySQL服务(确保端口与之前设置的一致,本文为3307)。
步骤6:验证新密码(确认重置成功)
打开CMD窗口,切换到MySQL的bin目录;
执行登录命令,验证新密码:
mysql -u root -P 3307 -p输入重置后的新密码(本文为123456),按下回车,若能正常显示
MariaDB [mysql]>或mysql>提示符,说明密码重置成功。
五、常见问题排查(避坑关键)
问题1:skip-grant-tables参数不生效
核心原因:MySQL服务未彻底停止,或配置文件中
skip-grant-tables写错位置、存在拼写错误;解决方案:优先使用本文「步骤2」的手动强制启动方式,绕过配置文件缓存;若仍不生效,重新检查任务管理器,确保所有
mysqld.exe进程已终止,再重新执行步骤2。问题2:执行ALTER USER命令报错1290
核心原因:未执行
FLUSH PRIVILEGES;命令,权限表未加载,导致skip-grant-tables模式下无法执行修改密码语句;解决方案:回到步骤4,先执行
FLUSH PRIVILEGES;,再执行密码修改命令(方案1或方案2)。问题3:端口指定失败,提示"Can't connect to MySQL server on 'localhost'"
核心原因:端口参数大小写错误(
-P是大写,用于指定端口;小写-p是用于输入密码的参数),或端口被其他程序占用;解决方案:严格执行命令
mysql -u root -P 3307(注意P是大写);若提示端口占用,关闭占用端口的程序,或修改MySQL端口后重新执行整个重置流程。
六、拓展:配置phpMyAdmin连接新密码
重置root密码后,若使用XAMPP自带的phpMyAdmin登录,会提示登录失败,需修改phpMyAdmin配置文件,步骤如下:
找到配置文件路径:
XAMPP\phpMyAdmin\config.inc.php(用记事本或代码编辑器打开);找到如下代码,填写重置后的新密码和MySQL端口:
bash$cfg['Servers'][$i]['user'] = 'root'; $cfg['Servers'][$i]['password'] = '123456'; // 替换为重置后的新密码 $cfg['Servers'][$i]['port'] = '3307'; // 替换为自己的MySQL端口(默认3306)保存文件,回到XAMPP控制面板,重启Apache服务(点击「Apache」模块的「Restart」或[Start]);
打开浏览器,访问
http://localhost/phpmyadmin,使用root账号和新密码,即可正常登录。
七、总结
密码重置核心逻辑:强制跳过权限验证 → 无密码登录 → 刷新权限 → 修改密码 → 恢复正常模式 ,全程围绕
skip-grant-tables参数和权限表操作;关键注意点:若MySQL端口不是默认3306,所有涉及登录、启动的命令,必须添加
-P 端口号(大写P),否则会连接失败;避坑重点:
skip-grant-tables模式下,必须先执行FLUSH PRIVILEGES;,才能修改密码,否则会报1290错误;适配范围:该方案适用于Windows系统下XAMPP环境的所有MySQL/MariaDB版本,可解决忘记密码、登录被拒、密码修改报错等各类问题,完全适配本地开发环境使用。


