Node.js跨服务器连接MySQL:能否通过公网IP建立远程连接?
解答:Node.js通过指定IP远程连接MySQL的问题
当然可以通过host属性指定公网IP建立远程连接啦!你的代码写法本身没毛病,报错connect ECONNREFUSED PUBLIC_IP:3307说明连接被服务器拒绝了,大概率是MySQL那边的配置或者网络防火墙没弄对,给你列几个必查的点:
确认MySQL端口配置正确
你代码里用的是3307,但MySQL默认端口是3306。得登录MySQL服务器,检查my.cnf(Linux)或my.ini(Windows)里的port参数是不是确实设为3307,改完后要重启MySQL服务才会生效。给MySQL用户授权远程访问权限
MySQL默认创建的用户只能在本地登录,你需要给user账号开放远程访问权限。登录MySQL服务器执行以下SQL命令:GRANT ALL PRIVILEGES ON myDB.* TO 'user'@'%' IDENTIFIED BY 'secret'; FLUSH PRIVILEGES;这里的
%表示允许任意IP访问,为了安全,你也可以把%换成Node.js服务器的具体公网IP。检查MySQL服务器的防火墙/安全组
这是最容易忽略的点:- 如果是云服务器(比如阿里云、腾讯云),要在控制台的安全组规则里添加入站规则,允许你的Node.js服务器IP访问3307端口;
- 如果是本地服务器,要配置
iptables(Linux)或Windows防火墙,放行3307端口的入站请求。
测试端口连通性
在Node.js服务器上用命令测试能不能访问MySQL的端口:# Telnet方式 telnet PUBLIC_IP 3307 # 或者nc方式(需要先安装nc) nc -zv PUBLIC_IP 3307如果连接失败,说明网络层面有问题,先解决这个再看代码。
修改MySQL的bind-address配置
打开my.cnf/my.ini,找到bind-address参数,默认值是127.0.0.1(只允许本地访问),要改成0.0.0.0允许所有IP访问,或者直接指定Node.js服务器的IP。修改后记得重启MySQL服务。
内容的提问来源于stack exchange,提问作者C-lio Garcia
相关产品推荐
相关产品推荐

