Ошибка базы данных подключения AWS RDS: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: отказ канала связи

Я пытаюсь развернуть приложение springboot на экземпляре AWS linux, но все равно получаю следующую ошибку:

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

Странно то, что я могу подключиться к своей базе данных RDS из этого приложения springboot, когда я запускаю приложение на своем локальном компьютере. Как только я пытаюсь развернуть приложение на экземпляре Linux на AWS, оно терпит неудачу, и я получаю указанные выше ошибки.

Вы убедились, что группы безопасности разрешают использование вашего экземпляра EC2? docs.aws.amazon.com/AmazonRDS/latest/UserGuide/…

INVOKE Cloud 24.04.2018 20:47

да, я убедился

Erent 24.04.2018 21:02

Проверьте активные соединения MySQL, набрав: 'show processlist' в консоли MySQL. И проверьте соединение mysql max в mysql.ini. Какая у вас версия Springboot и MySQL?

Adam Lesiak 24.04.2018 23:17

MySQL 5.6.39 и весенняя загрузка 1.5.9

Erent 25.04.2018 00:58

как мне войти в консоль mysql?

Erent 25.04.2018 01:05
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
5
5 134
2

Ответы 2

Я тоже столкнулся с подобной проблемой. Мне нужно обновить дополнительные параметры mysql из /etc/mysql/mysql.conf.d/mysqld.cnf

Остановить сервер 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;

Надеюсь, это кому-то поможет

Если ваша БД является экземпляром RDS, убедитесь, что общедоступный IP-адрес устройства, обращающегося к БД, включен в группу безопасности экземпляра RDS. Также убедитесь, что общедоступный IP-адрес включен во входящий канал соответствующей группы безопасности VPC.

Другие вопросы по теме