MySQL错误1251(ER_NOT_SUPPORTED_AUTH_MODE):常规修复无效求助
解决MySQL ER_NOT_SUPPORTED_AUTH_MODE错误及phpMyAdmin执行语句报错问题
首先,咱先搞定phpMyAdmin里执行ALTER USER语句的报错问题——你遇到的Missing ',' before start of a new ALTER operation!错误,大概率是phpMyAdmin的SQL解析对空密码的写法有点挑剔,或者和你的MySQL版本搭配有小冲突。试试这两个方案:
方案一:调整ALTER USER语句的写法
把原来的语句保持格式严谨性,执行后一定要刷新权限:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';
紧接着执行刷新权限命令,否则修改不会生效:
FLUSH PRIVILEGES;
方案二:直接修改mysql.user表(更稳妥的替代方案)
如果上面的语句还是报错,咱绕开ALTER USER,直接操作底层用户表:
- 在phpMyAdmin左侧导航栏切换到
mysql数据库 - 执行以下SQL:
UPDATE user SET authentication_string = '', plugin = 'mysql_native_password' WHERE User = 'root' AND Host = 'localhost';
- 同样必须刷新权限:
FLUSH PRIVILEGES;
这种写法在很多旧版本phpMyAdmin里都能正常运行,因为它直接修改了用户核心数据,避开了ALTER USER的解析问题。
为啥Stack Overflow的方案对你无效?
可能有这几个原因:
- 你没执行
FLUSH PRIVILEGES,导致修改的认证模式没有生效 - 你的phpMyAdmin实际使用的用户不是
root@localhost(比如是root@127.0.0.1),可以在phpMyAdmin的「用户账户」页面查看具体的用户主机,然后把语句里的localhost改成对应的主机名 - Node.js的mysql客户端版本太旧,即使服务器端改了认证模式,旧客户端还是不兼容新的协议
Node.js连接的额外优化
你的连接代码本身没问题,但如果改完服务器端的认证模式还是报错,可以试试这两个调整:
1. 升级mysql客户端或改用mysql2
旧版的mysql包对MySQL 8.0+的认证模式支持不佳,建议升级到最新版:
npm install mysql@latest
或者直接改用mysql2包(它对高版本MySQL的兼容性更好):
npm install mysql2
然后把代码里的require("mysql")改成require("mysql2"),连接逻辑完全一致,无需修改其他代码。
2. 在连接配置里指定认证插件
如果不想换包,可以在连接配置里明确指定authPlugin参数:
var con = mysql.createConnection({ host: "localhost", user: "root", password: "", database: "fitness_app", authPlugin: 'mysql_native_password' // 新增这一行 });
最后验证步骤
- 重启XAMPP的MySQL服务,确保配置生效
- 在phpMyAdmin的「用户账户」页面,检查root用户的「插件」列是否显示
mysql_native_password - 重启你的Node.js服务,测试数据库连接是否正常
内容的提问来源于stack exchange,提问作者yesIamFaded
相关产品推荐
相关产品推荐

