为何MySQL GUI可连接RDS端点,Laravel项目却无法连接?
问题分析与解决方案
这个报错php_network_getaddresses: getaddrinfo failed本质是EC2实例无法解析RDS端点的域名——你已经验证过Laravel配置没问题,GUI也能正常连RDS,说明问题出在EC2的网络或DNS配置上,按以下步骤排查修复:
1. 先测试EC2的DNS解析能力
登录EC2终端,执行命令测试RDS域名能否被解析:
nslookup myRdsEndpoint.us-east-1.rds.amazonaws.com
或者用dig:
dig myRdsEndpoint.us-east-1.rds.amazonaws.com
如果返回NXDOMAIN或无解析结果,直接确认是DNS配置问题,跳到下一步。
2. 检查并修复EC2的DNS设置
- 查看当前DNS配置:
AWS EC2默认会用VPC提供的DNS服务器(通常是VPC网段的第二个IP,比如VPC网段是10.0.0.0/16,DNS就是10.0.0.2)。cat /etc/resolv.conf - 如果
resolv.conf里的DNS不是VPC默认值,或者自定义DNS无法解析AWS域名,修改配置:
编辑/etc/resolv.conf,添加或替换成VPC默认DNS:
注意:如果EC2用DHCP获取IP,重启后nameserver 10.0.0.2 # 替换成你的VPC对应默认DNS地址resolv.conf可能被覆盖,需要修改DHCP配置文件/etc/dhcp/dhclient.conf,添加一行:prepend domain-name-servers 10.0.0.2;
3. 验证EC2到RDS的端口连通性
即使DNS正常,也要确认EC2能访问RDS的3306端口:
nc -zv myRdsEndpoint.us-east-1.rds.amazonaws.com 3306
如果连接失败,再检查RDS安全组是否允许EC2的IP/安全组访问3306端口(不过GUI能连,大概率安全组没问题,可快速核对)。
4. 清除Laravel配置缓存
有时候Laravel会缓存旧配置,执行命令清缓存:
php artisan config:clear php artisan cache:clear
之后重启PHP-FPM或Web服务器(比如Nginx/Apache)。
5. 临时用IP替代域名测试
如果DNS问题暂时无法解决,可先把RDS的私有IP(AWS控制台RDS详情页或GUI连接后查看)替换到.env的DB_HOST里,清缓存后测试。如果能连接,就彻底坐实是DNS解析问题,回到步骤2彻底修复。
内容的提问来源于stack exchange,提问作者sp92
相关产品推荐
相关产品推荐

