AWS EC2(Nginx Debian)连接RDS偶发php_network_getaddresses错误求助
解决EC2连接RDS偶尔出现DNS解析失败的问题
针对你遇到的php_network_getaddresses: getaddrinfo failed: Name or service not known偶发问题,可按以下步骤排查解决:
测试RDS端点的DNS解析稳定性
在EC2实例上执行dig your-rds-endpoint.rds.amazonaws.com或nslookup your-rds-endpoint.rds.amazonaws.com,多次运行验证是否每次都能正常返回IP地址。若存在解析失败情况,调整EC2的DNS配置:- 若使用systemd-resolved,编辑
/etc/systemd/resolved.conf,将DNS项改为DNS=8.8.8.8 8.8.4.4,随后重启服务:systemctl restart systemd-resolved - 若直接管理resolv.conf,编辑
/etc/resolv.conf,添加nameserver 8.8.8.8并注释原有nameserver条目(部分系统会自动覆盖该文件,建议通过systemd-resolved做持久化配置)
- 若使用systemd-resolved,编辑
优化PHP连接逻辑,增加重试机制
解析失败多为瞬时网络问题,可在连接时设置超时并添加重试逻辑:$max_retries = 2; $retry_delay = 1; // 重试间隔秒数 $connection = null; for ($i = 0; $i < $max_retries; $i++) { $connection = mysqli_init(); $connection->options(MYSQLI_OPT_CONNECT_TIMEOUT, 10); $connection->real_connect('你的RDS端点', '用户名', '密码', '数据库名'); if (!$connection->connect_error) { echo "Connected."; break; } if ($i === $max_retries - 1) { echo "Not connected, error: " . $connection->connect_error; } sleep($retry_delay); }检查网络与安全组配置
- 确认RDS安全组已允许EC2所在VPC子网段或EC2安全组的入站连接(MySQL默认端口3306),避免因EC2动态公网IP变化导致的访问限制(优先用安全组而非单个IP配置规则)
- 使用
mtr your-rds-endpoint.rds.amazonaws.com持续监控网络路径,查看是否存在中间节点丢包或延迟过高的情况
排查RDS实例状态
登录AWS控制台查看RDS实例的事件日志,确认是否存在临时维护、重启或可用性波动记录,这类情况可能引发瞬时连接失败
内容的提问来源于stack exchange,提问作者cloude
相关产品推荐
相关产品推荐

