密码都对Node.js却连不上Linux数据库

代码已经部署在本地,确认MySQL运行中,反复核对密码都对。需要增加socketPath

sql 复制代码
const DB = {
  socketPath: '/var/run/mysqld/mysqld.sock',
  host: 'localhost',
  user: 'root',
  password: '',
  database: 'room520',
  // port 删掉!socket模式不使用端口,写了也无效
};
const conn = await mysql.createConnection(DB);

结论

这个配置在 Linux 下大概率连不上,原因要分开讲清楚:

yaml 复制代码
const DB = {
  host    : 'localhost',
  user    : 'root',
  password: '',
  port    : 3380,
  database:  'room520',
};

核心原理(Linux 上 mysql2 的行为)

在 Linux 平台:当 host: 'localhost' 时,mysql2 会优先走 Unix socket(mysqld.sock),完全忽略 port 参数! 端口 3380 只对 TCP 连接生效,socket 连接不使用端口。

你现在数据库状态:

  • root@localhostsocket 空密码 ,命令行 mysql -uroot 直接登录,这是 socket 登录。

  • 但是你的JS配置写了 host:'localhost' + port:3380,mysql2 直接走 socket,port 3380 被无视

    理论上 socket 模式空密码可以连上,但 mysql2 对空密码 + socket 的兼容不稳定,经常报 ER_ACCESS_DENIED_NO_PASSWORD_ERROR,就是你遇到的报错。


两种可行写法,二选一

方案1:使用socket(对应root空密码,和你命令行登录一致)

去掉port,增加socketPath

csharp 复制代码
const DB = {
  socketPath: '/var/run/mysqld/mysqld.sock',
  host    : 'localhost',
  user    : 'root',
  password: '',
  database:  'room520',
};

✅ 这个是 socket 连接,不需要端口,空密码root可以连上。 ⚠️ 缺点:只能本机运行,不能远程;环境迁移容易出错,不推荐业务脚本长期用。

方案2:TCP方式(推荐,用dudubb账号,port=3380,稳定)

arduino 复制代码
const DB = {
  host    : '127.0.0.1', // 重点!写127.0.0.1才会走TCP,读取port
  user    : 'dudubb',
  password: 'Dudubb@123456',
  port    : 3380,
  database:  'room520',
};

host:127.0.0.1 = 强制TCP,port=3380生效,不受socket影响。前提:执行ALTER把dudubb改成mysql_native_password。

一句话总结

  1. host:'localhost':Linux mysql2默认socket,port无效,空密码root容易报错。
  2. host:'127.0.0.1':TCP连接,port=3380生效,适合Node脚本。

你想试socket的root空密码版本,还是直接用dudubb TCP版本?

相关推荐
彧azz1 小时前
Linux 网络编程学习总结
linux·网络·笔记·学习·面试
华章酱1 小时前
MySQL幻读是怎么出现的
数据库·mysql·幻读
浅念-1 小时前
Redis基础详解:单线程模型、String与Hash数据结构
服务器·数据库·redis·sql·mysql·nosql数据库·nosql
aramae2 小时前
MySQL内置函数(7)
开发语言·笔记·后端·mysql·其他
susplus2 小时前
【ARM 裸机开发 (IMX6ULL-mini)】GNU工具、Makefile 工程构建、链接脚本详解|C 语言点灯 + 蜂鸣器驱动
linux·arm·makefile·imx6ull
Shadow(⊙o⊙)2 小时前
Linux进阶知识1.0
linux·运维·服务器
>Andre<2 小时前
UFS5.0标准中文全译·卷一:范围、术语与架构
android·linux·嵌入式硬件
用户0510122572963 小时前
Linux下有关QT显示环境变量设置
linux·嵌入式
闲云自留地3 小时前
告别命令恐惧症,openEuler 基础操作 + 文本 + 网络管理实战
linux·运维·云计算