EC2连接同VPC同安全组的RDS MySQL失败,提示IP解析错误求助
嘿,这个问题我之前排查过类似的情况,咱们一步步来定位问题:
先检查你的应用连接配置
错误日志里提到IP address '172.31.23.211' could not be resolved,这很关键——正常来说IP地址是不需要DNS解析的,只有域名才需要。这说明你的网页应用的数据库连接字符串里,大概率是把EC2的私有IP误填成了RDS的主机地址,或者错误地将这个IP当作域名来使用了。
赶紧去核对代码里的DB_HOST配置项,应该填写RDS的官方端点(比如your-db-name.xxxxxx.region.rds.amazonaws.com),而不是EC2的IP或者RDS的IP(RDS的IP可能会变动,官方推荐用端点)。在EC2上手动测试连接
先排除代码层面的问题,登录到EC2实例,用MySQL客户端手动尝试连接RDS:mysql -h <你的RDS端点> -u <数据库用户名> -p如果手动能成功连接,那100%是应用配置的问题;如果手动也连不上,再往下排查。
检查VPC的DNS配置
如果手动连接也失败,或者你发现反向解析有问题,去检查你的VPC设置:
确保VPC的enableDnsSupport和enableDnsHostnames都设置为true。这两个选项开启后,VPC内的实例才能正确解析RDS的端点域名,以及私有IP的反向解析。排查MySQL的反向解析验证
有些RDS参数组里没有开启skip-name-resolve,这时候MySQL会尝试对客户端IP做反向解析。如果EC2的私有IP无法被反向解析到主机名,可能会引发连接问题。你可以尝试修改RDS的参数组,开启skip-name-resolve,然后重启RDS实例试试。
另外,页面空白的原因大概率是应用没有正确捕获数据库连接异常,建议先在开发环境开启错误输出,或者查看应用的详细日志,这样能更快定位问题。
内容的提问来源于stack exchange,提问作者Jimmy

