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

AWS EC2环境下如何获取MySQL的远程连接主机地址?Node.js远程连接失败求助

解决AWS EC2上数据库远程连接的问题

我来帮你一步步排查和解决这个问题——用公网IP连不上其实是很常见的配置问题,主要涉及数据库绑定设置、用户权限和AWS安全组这几个关键点:

1. 修改数据库的绑定地址(允许外部访问)

默认情况下,MySQL/MariaDB只会绑定localhost(127.0.0.1),这意味着只有EC2实例内部才能访问它。你需要修改配置让它监听所有网卡或者指定EC2的私网IP:

  • 登录到EC2实例,找到数据库配置文件:
    • Ubuntu/Debian:/etc/mysql/mysql.conf.d/mysqld.cnf
    • CentOS/RHEL:/etc/my.cnf 或者 /etc/mysql/my.cnf
  • 找到bind-address这一行,把它改成0.0.0.0(允许所有IP访问),或者EC2的私网IP(更安全)
  • 重启数据库服务生效:
    # MySQL
    sudo systemctl restart mysql
    # MariaDB
    sudo systemctl restart mariadb
    

2. 给数据库用户授权远程访问权限

phpMyAdmin里显示的localhost是因为它用的是仅允许本地连接的用户账号,你需要给用户添加远程访问的权限:

  • 打开phpMyAdmin,进入用户账户页面
  • 找到你用来连接的用户(比如root或者自定义用户),点击编辑权限
  • 在登录信息里,把主机改成%(允许任何外部IP访问,注意:生产环境建议改成你的本地公网IP,更安全)
  • 保存修改,或者直接执行SQL语句:
    GRANT ALL PRIVILEGES ON 你的数据库名.* TO '你的用户名'@'%' IDENTIFIED BY '你的密码';
    FLUSH PRIVILEGES;
    
    (把你的数据库名、你的用户名、你的密码替换成实际内容)

3. 配置EC2安全组允许3306端口访问

AWS安全组默认会阻止外部对3306端口(MySQL默认端口)的访问,必须手动添加规则:

  • 登录AWS控制台,找到你的EC2实例,点击安全组进入配置页面
  • 添加入站规则:
    • 类型:MySQL/Aurora
    • 端口范围:3306
    • 源:选择我的IP(自动填入你的本地公网IP),或者手动输入你的IP(比如xxx.xxx.xxx.xxx/32)
  • 保存规则

4. Node.js连接示例

完成上面的配置后,你就可以用EC2的公网IP作为主机地址来连接了,这里给你一个用mysql2库的示例代码:

const mysql = require('mysql2');

// 创建连接
const connection = mysql.createConnection({
  host: '你的EC2公网IP', // 这里填EC2的公网IP
  user: '授权的用户名',
  password: '你的数据库密码',
  database: '要连接的数据库名',
  port: 3306 // MySQL默认端口,不用改除非你自定义过
});

// 测试连接
connection.connect((err) => {
  if (err) {
    console.error('连接失败:', err.message);
    return;
  }
  console.log('✅ 成功连接到EC2上的数据库!');
});

额外注意事项

  • 生产环境不要把bind-address设为0.0.0.0或者用户主机设为%,尽量限制到特定IP,避免安全风险
  • 如果你的EC2实例有弹性IP,建议用弹性IP代替临时公网IP,避免重启实例后IP变化
  • 如果你还连不上,可以检查AWS的网络ACL(如果配置了的话),确保入站和出站都允许3306端口的流量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 18:07:50