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

树莓派上Node.js连接本地MySQL数据库遇ECONNREFUSED错误求助

解决Node.js连接树莓派本地MySQL出现ECONNREFUSED错误

问题描述

我在树莓派上搭建了服务器并配置了本地MySQL数据库,部署完成后使用以下Knex连接代码:

knexDb = knex({ 
  client: 'mysql', 
  connection: { 
    host: "localhost", 
    user: "myUsername", 
    password: "MyPassword", 
    port: 3306,
    database: "DBName" 
  } 
});

但通过Postman访问接口时,出现如下连接拒绝错误:

{ 
 "errno": -111,
 "code": "ECONNREFUSED",
 "syscall": "connect",
 "address": "::1",
 "port": 3306,
 "fatal": true 
}

Node.js进程正常运行,且树莓派本地可直接访问该数据库,求有效解决方法。

解决方案

  • 强制使用IPv4连接
    错误信息中的address: "::1"表明Node.js尝试通过IPv6访问localhost,但MySQL可能未监听IPv6端口。将连接配置里的host替换为127.0.0.1(IPv4本地回环地址),强制走IPv4链路:

    knexDb = knex({ 
      client: 'mysql', 
      connection: { 
        host: "127.0.0.1",
        user: "myUsername", 
        password: "MyPassword", 
        port: 3306,
        database: "DBName" 
      } 
    });
    
  • 检查MySQL绑定地址配置
    登录树莓派的MySQL控制台:

    sudo mysql -u root -p
    

    执行命令查看当前绑定地址:

    SHOW VARIABLES LIKE 'bind_address';
    

    如果结果仅为::1(仅IPv6),修改MySQL配置文件(通常路径为/etc/mysql/mysql.conf.d/mysqld.cnf),找到bind-address行,修改为0.0.0.0(允许所有IP协议访问)或127.0.0.1(仅IPv4本地访问):

    bind-address = 0.0.0.0
    

    修改完成后重启MySQL服务:

    sudo systemctl restart mysql
    
  • 确认MySQL用户访问权限
    确保数据库用户myUsername允许从IPv6本地地址(::1)或localhost访问。登录MySQL后执行:

    SELECT user, host FROM mysql.user WHERE user = 'myUsername';
    

    如果查询结果中没有::1或localhost的记录,执行授权命令:

    GRANT ALL PRIVILEGES ON DBName.* TO 'myUsername'@'::1' IDENTIFIED BY 'MyPassword';
    FLUSH PRIVILEGES;
    

    或者直接授权本地所有地址:

    GRANT ALL PRIVILEGES ON DBName.* TO 'myUsername'@'localhost' IDENTIFIED BY 'MyPassword';
    FLUSH PRIVILEGES;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 21:40:19