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

Node.js连接MySQL报ER_ACCESS_DENIED_ERROR空用户错误排查

问题根源

你遇到的参数不生效、一直返回空用户连接错误的核心原因是:你根本没有正确定义和传入数据库配置对象,createConnection方法从头到尾没拿到你写的连接参数,自然不管你怎么改配置里的账号密码都没用。
你代码里的语法错误有三个:

  • 导入mysql模块时你给它起的别名就叫SQL,后续你写的SQL: { ... }不是合法的变量定义语法,这个配置块根本不会被JS识别为有效变量
  • 就算你是想给SQL对象挂载属性,对象内部的键值对之间也没加逗号分隔,本身就不符合JS对象语法
  • 配置里的database值你写的是'root',这是用户名不是数据库名,属于值填错的问题
修复方法
  • 单独定义数据库配置对象,不要和导入的mysql模块重名,对象内部属性之间补全逗号分隔
  • 把定义好的配置对象正确传入createConnection方法
  • 核对本地MySQL的实际root密码、已经创建好的目标数据库名,和配置值保持一致

修复后的完整参考代码:

import mysql from 'mysql';

// 单独定义配置,避免和导入的模块重名,属性之间必须加逗号分隔
const dbConfig = {
  host: 'localhost',
  user: 'root',
  password: '', // 填写你本地MySQL实际的root密码,没设置密码就留空
  database: 'db' // 填写你已经创建好的、要连接的目标数据库名,不要填root
};

function load() {
  // 传入正确的配置对象创建连接
  const connection = mysql.createConnection(dbConfig);
  connection.connect((err) => {
    if(err) {
      console.log(err);
      process.exit(1); // 连接异常时用非0状态码退出是更规范的写法
    }
    console.clear();
    console.log('Successfully logged in!');
  });
}

load();
后续排查点

如果改完代码还是连接失败,按顺序检查:

  • 本地MySQL服务是否已经正常启动,未启动的话先启动服务再运行代码
  • 如果你给root用户设置过密码,password字段必须填写对应正确值,不能留空
  • 配置里填写的database必须是你已经在MySQL里提前创建好的库,不存在的库会连接失败
  • 如果你用的是MySQL 8.0及以上版本,默认的鉴权插件caching_sha2_password不被旧版mysql包支持,可以替换为mysql2包使用,或者给数据库用户修改兼容的鉴权方式

你之前把密码改成随机值依然提示using password: NO,就是因为你写的配置块完全没被JS识别,创建连接时根本没有传入密码参数,程序默认用空用户、无密码的方式发起连接,才会返回固定的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 17:33:39