密码都对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@localhost:socket 空密码 ,命令行 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版本?

相关推荐
cnskylee1 小时前
【MySQL】麒麟V10 SP3系统安装MySQL-Commercial-8.0.46
数据库·mysql·adb
梦幻通灵1 小时前
修改MySQL数据库递增序列【持续更新】
数据库·mysql
沫璃染墨2 小时前
从零入门计算机网络系列(十一):HTTP协议进阶——从重定向原理到GET/POST与Fiddler抓包
linux·服务器·开发语言·网络·c++·tcp/ip·html
大侠归来2 小时前
常用 MySQL 分库分表方案详解
数据库·mysql
AI_Lab014 小时前
宝塔用了两年,有没有必要换成轻量方案?
linux·运维·服务器
by209994 小时前
Linux GDB 调试与 CGDB 使用
linux·运维·服务器·经验分享
星恒随风4 小时前
Linux网络编程:应用层协议究竟是什么?从网络计算器到TCP Socket抽象基类完整实现
linux·网络·笔记·tcp/ip
`Levie6 小时前
MySQL-数据库服务日志管理与数据闪回
数据库·mysql
香蕉大香蕉(06敬畏市场)7 小时前
MySQL 单点详解(01)
java·数据库·mysql·面试·博客·实习
feng_you_ying_li7 小时前
linux之网络层
linux·运维·网络