树莓派上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
相关产品推荐
相关产品推荐

