AWS RDS连接数据库错误:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链接失败

时间:2018-04-24 18:39:25

标签: java mysql amazon-web-services spring-boot

我正在尝试在AWS linux实例上部署springboot应用程序但是我一直收到以下错误:

2018-04-24 18:15:27.777  INFO 24020 --- [ost-startStop-1] 

o.s.b.w.servlet.ServletRegistrationBean  : Mapping servlet: 'dispatcherServlet' to [/]
2018-04-24 18:15:28.771 ERROR 24020 --- [main] 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.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_161]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_161]

... 

2018-04-24 16:58:57.522  WARN 23780 --- [main] o.s.b.a.orm.jpa.DatabaseLookup : Unable to determine jdbc url from datasource

org.springframework.jdbc.support.MetaDataAccessException: Could not get Connection for extracting meta data; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: 
Could not get JDBC Connection; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

这就是我创建applications.properties文件的方式:

#database config
spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://****-west-1.rds.amazonaws.com:3306/DevManagementDB
spring.datasource.username=root
spring.datasource.password=mypassword
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
spring.jpa.hibernate.ddl-auto=update

奇怪的是,当我在本地计算机上运行应用程序时,我可以从这个springboot应用程序连接到我的RDS数据库。一旦我尝试将应用程序部署到AWS上的linux实例,它就会失败并且我得到上述错误。

2 个答案:

答案 0 :(得分:0)

我也遇到过类似的问题。 我必须从/etc/mysql/mysql.conf.d/mysqld.cnf

更新我的mysql额外参数

停止mysql服务器sudo systemctl stop mysql.service

需要更新

bind-address = 0.0.0.0 // replace 0.0.0.0 with required ip, 0.0.0.0 allows all ip

启动mysql服务器sudo systemctl start mysql.service

还需要创建一个可以访问该IP的用户,并在mysql中添加权限

mysql > CREATE USER 'user_name'@'%' IDENTIFIED BY 'PASSWORD'; // replace % with appropriate IP 

mysql > CREATE USER 'user_name'@'%' IDENTIFIED BY 'PASSWORD'; // replace % with appropriate IP

mysql > GRANT ALL PRIVILEGES ON *.* TO 'user_name'@'%' WITH GRANT OPTION; // replace % with appropriate IP

mysql > FLUSH PRIVILEGES;

希望这会对某人有所帮助

答案 1 :(得分:0)

如果您的数据库是RDS实例,请确保访问该数据库的设备的公共IP地址包含在RDS实例的安全组中。另外,请确保相应的VPC安全组的“入站”通道中包含公用IP地址。