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

Node.js连接MySQL 8.2.0遇ER_NOT_SUPPORTED_AUTH_MODE错误求助

解决MySQL 8.x与Node.js的认证协议不兼容问题

问题根源

MySQL 8.0+默认使用caching_sha2_password作为用户认证协议,但旧版的mysql npm包不支持该协议,导致连接时报错ER_NOT_SUPPORTED_AUTH_MODE。


方案一:修改MySQL用户的认证方式(适合坚持用旧mysql包的情况)

你之前执行ALTER USER失败,大概率是没替换正确的用户名/密码,或者没刷新权限。按以下步骤来:

  1. 打开MySQL Workbench,用root用户登录(确保账号有足够权限)
  2. 执行以下SQL(必须替换成你自己的用户名和真实密码):
-- 替换root为你的数据库用户名,替换为你的真实密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的真实密码';
-- 必须执行这句刷新权限,否则修改不生效
FLUSH PRIVILEGES;
  1. 执行后重新启动MySQL服务(Windows上可以在服务管理器里找到MySQL服务重启)
  2. 回到Node代码,用原来的mysql包连接即可。

方案二:换用mysql2包(更推荐,无需修改MySQL配置)

mysql2是mysql包的升级版,原生支持caching_sha2_password认证,维护更活跃,步骤如下:

  1. 卸载旧的mysql包,安装mysql2:
npm uninstall mysql
npm install mysql2
  1. 修改你的Node代码,替换成mysql2的调用(几乎不用改其他配置):
const express = require('express');
const http = require('http');
const socketIO = require('socket.io');
const mysql = require('mysql2'); // 换成mysql2

const db = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: '你的真实密码',
    database: 'MySQL82',
    port: 3306, // 这里用数字类型更规范
});

db.connect((err) => {
    if (err) {
        console.error('数据库连接失败:', err);
        return; // 别直接throw,避免程序崩溃
    }
    console.log('Connected to MySQL database');
});
  1. 运行node index.js,应该就能正常连接了。

额外排查点

  • 确认MySQL服务正在运行(Windows可以通过任务管理器的服务标签页检查)
  • 确认3306端口没被其他程序占用
  • 检查数据库用户名、密码、数据库名是否完全正确,注意大小写(Windows MySQL默认不区分,但最好统一)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 09:32:46