【问题标题】:SpringBoot app running on AWS-EC2 unable to connect to MySQL AWS-RDS database在 AWS-EC2 上运行的 Spring Boot 应用程序无法连接到 MySQL AWS-RDS 数据库
【发布时间】:2017-02-02 01:47:54
【问题描述】:

我在运行我在 EC2 实例中开发的应用程序时遇到问题。当我执行 .jar (java -jar app.jar) 时,SpringBoot 应用程序启动,但在尝试连接到我的 MySQL RDS 数据库时失败。问题是当我在我的机器上本地运行应用程序时,数据库连接没有问题。

我已经打开了运行应用程序的端口 (8090) 和 MySql 端口 (3306) 用于入站和出站流量:

这是我得到的错误:

2016-09-23 17:46:38.132  INFO 10161 --- [main] .t.TomcatEmbeddedServletContainerFactory : Server initialized with port: 8090
2016-09-23 17:46:38.604  INFO 10161 --- [main] o.apache.catalina.core.StandardService   : Starting service Tomcat
2016-09-23 17:46:38.605  INFO 10161 --- [main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/7.0.54
2016-09-23 17:46:38.724  INFO 10161 --- [ost startStop 1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2016-09-23 17:46:38.725  INFO 10161 --- [ost startStop 1] o.s.web.context.ContextLoader: Root WebApplicationContext: initialization completed in 5028 ms
2016-09-23 17:48:48.476 ERROR 10161 --- [ost startStop 1] o.a.tomcat.jdbc.pool.ConnectionPool: Unable to create initial connections of pool.

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

有什么办法可以解决这个问题吗?

非常感谢您的帮助

问候

安德烈斯

【问题讨论】:

    标签: java mysql amazon-ec2 spring-boot amazon-rds


    【解决方案1】:

    从您的描述和日志文件来看,网络配置很可能是这里的原因。

    您可能想要绘制实例的网络拓扑(区域/可用区、VPC、子网、网络 acl、安全组)。当您进行更复杂的开发工作时,这将非常有帮助。 有很好的参考:VPC Introduction and Security in your VPC and Scenarios for Accessing a DB Instance in a VPC

    我建议您采取以下措施进行故障排除:

    • 检查您的 EC2 实例和 RDS 实例的安全组 (SG) 配置。
      您可以通过转到 EC2 Dashboard/RDS Dashboard -> 单击实例并查看“安全组”描述来检查这一点,或者您可以单击设置图标(显示/隐藏列)并勾选“安全组”。

      在 RDS 的 SG 配置中:确保您已启用从 EC2 实例的 SG 到端口 3306 的访问。您可以通过将 EC2 实例的 SG ID 放入配置的 Source 字段中,作为“自定义 IP”值来做到这一点。有关详细信息,请参阅上述参考中的第一种情况。

    • 使用mysql命令行测试EC2实例与RDS的连接。

    希望对你有帮助。

    【讨论】:

    • 非常感谢您对@LiemPham 的回复。你是对的。问题是 RDS 安全组没有 EC2 安全组的入站规则。 RDS 和 EC2 都在同一个 VPC 和子网中,但它们无法相互通信。与 VPC 相关的三个链接对于理解 EC2 和 RDS 在 AWS 中如何通信非常有用。
    【解决方案2】:

    您需要执行以下步骤:

    1) 进入EC2实例,在RDS中找到你想要访问的安全组

    2) 现在转到您的 RDS 安全组并选择入站规则 选择所有 TCP 并添加您的 sg-xxx(安全组)

    【讨论】:

      猜你喜欢
      • 2020-10-19
      • 1970-01-01
      • 2017-04-19
      • 2023-01-23
      • 2016-07-01
      • 1970-01-01
      • 2019-11-10
      • 2017-05-22
      • 1970-01-01
      相关资源
      最近更新 更多