跳至正文
-
关注
IT极限技术分享汇

ITmax

IT极限技术分享汇

ITmax

  • 首页
  • 商店
  • 我的帐户
  • 结账
  • 购物车
  • 首页
  • 商店
  • 我的帐户
  • 结账
  • 购物车
关

搜索

技术分享

连接mysql:Error: connect ECONNREFUSED ::1:3306 at TCPConnectWrap

作者 aigc
2025年3月21日 1 分钟阅读
0

问题描述

  • 笔者把服务器上的node,从14升级到18
  • 再次使用express的连接池连接mysql的时候(mysql版本:2.18.1)
  • 出现连接不上的报错
  • 报错信息如下:
Error: connect ECONNREFUSED ::1:3306
    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1555:16)
    --------------------
    at Protocol._enqueue (C:/Users/Administrator/Desktop/code/exress/node_modules/mysql/lib/protocol/Protocol.js:144:48)
    at Protocol.handshake (C:/Users/Administrator/Desktop/code/exress/node_modules/mysql/lib/protocol/Protocol.js:51:23)
    at PoolConnection.connect (C:/Users/Administrator/Desktop/code/exress/node_modules/mysql/lib/Connection.js:116:18)
    at Pool.getConnection (C:/Users/Administrator/Desktop/code/exress/node_modules/mysql/lib/Pool.js:48:16)
    at C:/Users/Administrator/Desktop/code/exress/router.js:41:8
    at Layer.handle [as handle_request] (C:/Users/Administrator/Desktop/code/exress/node_modules/express/lib/router/layer.js:95:5)
    at next (C:/Users/Administrator/Desktop/code/exress/node_modules/express/lib/router/route.js:149:13)
    at Route.dispatch (C:/Users/Administrator/Desktop/code/exress/node_modules/express/lib/router/route.js:119:3)
    at Layer.handle [as handle_request] (C:/Users/Administrator/Desktop/code/exress/node_modules/express/lib/router/layer.js:95:5)
    at C:/Users/Administrator/Desktop/code/exress/node_modules/express/lib/router/index.js:284:15 {
  errno: -4078,
  code: 'ECONNREFUSED',
  syscall: 'connect',
  address: '::1',
  port: 3306,
  fatal: true
}

报错原因——MySQL 使用 IPv4 连接

  • 上述的报错Error: connect ECONNREFUSED ::1:3306的::1是IPV6的写法
  • 就是使用IPV6去链接默认mysql的3306端口
  • 不过MySQL 使用 IPv4 连接
  • 当node升级到18的时候
  • 就不支持localhost的写法进行连接了
  • node14的时候,还可以连得上
  • 所以强制使用ipv4的写法即可

原先的连接池写法

// 引入mysql数据库
var mysql = require('mysql')
// 数据库连接池的配置
var pool = mysql.createPool({
  connectionLimit: 100,  // 连接池的大小
  host: 'localhost', // 主机名
  user: 'user',  // 用户名
  password: 'password', // 密码
  database: 'database' // 数据库名称 在数据库里面建立了一个database数据库,里面有很多表格
});
// 暴露连接池
module.exports = pool

改成IPv4连接

var mysql = require('mysql')
var pool = mysql.createPool({
  connectionLimit: 100,
  host: '127.0.0.1',  // 强制使用 IPv4 地址主机连接
  user: 'user',
  password: 'password',
  database: 'database'
});
module.exports = pool

这样的话,问题就解决了

https://segmentfault.com/a/1190000046306756

作者

aigc

关注我
其他文章
上一个

独立开发者如何找到低竞争、高潜力产品并高效营销?

下一个

如何绕过限制,获取 Cursor 的系统提示词

暂无评论!成为第一个。

发表回复 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Copyright 2026 — IT极限技术分享汇. 备案号:浙ICP备17006560号-2