You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,直接操作底层用户表:

  1. 在phpMyAdmin左侧导航栏切换到mysql数据库
  2. 执行以下SQL:
UPDATE user SET authentication_string = '', plugin = 'mysql_native_password' WHERE User = 'root' AND Host = 'localhost';
  1. 同样必须刷新权限:
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' // 新增这一行
});

最后验证步骤

  1. 重启XAMPP的MySQL服务,确保配置生效
  2. 在phpMyAdmin的「用户账户」页面,检查root用户的「插件」列是否显示mysql_native_password
  3. 重启你的Node.js服务,测试数据库连接是否正常

内容的提问来源于stack exchange,提问作者yesIamFaded

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 21:57:50