2015-02-25 2 views
1

У меня есть MySQL работает в ec2, например, когда я пытаюсь использовать это MySQL, я могу сделать следующее:Как установить соединение jdbc с Mysql в экземпляре AWS?

dilin-mbp:~ dilin$ ssh -i /Users/dilin/Documents/SelfProject/MM_AWS_MainKey.pem [email protected] 
Last login: Tue Feb 24 05:07:47 2015 from c-73-189-116-135.hsd1.ca.comcast.net 

    __| __|_ ) 
    _| ( / Amazon Linux AMI 
    ___|\___|___| 

https://aws.amazon.com/amazon-linux-ami/2014.09-release-notes/ 
[[email protected] ~]$ mysql -u root -p 
Enter password: 
Welcome to the MySQL monitor. Commands end with ; or \g. 
Your MySQL connection id is 1969 
Server version: 5.5.42 MySQL Community Server (GPL) 

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. 

Oracle is a registered trademark of Oracle Corporation and/or its 
affiliates. Other names may be trademarks of their respective 
owners. 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 

mysql> select * from .....; 

То есть, мне нужно сначала использовать файл PEM для доступа к серверу, а затем я может использовать mysql.

Здесь возникает вопрос, в JDBC, как я могу настроить файл pem, чтобы заставить себя подключиться?

Моя наивная реализация:

String url = "jdbc:mysql://54.69.23.214:3306/"; 
    String dbName = "snapsono"; 
    String driver = "com.mysql.jdbc.Driver"; 
    String userName = "root"; 
    String password = "pwd"; 
    SnapList snapList = new SnapList(); 
    try { 
     Driver mysqlDriver = (Driver) Class.forName(driver).newInstance(); 
     DriverManager.registerDriver(mysqlDriver); 
     logger.info("about to get access"); 
     Connection conn = DriverManager.getConnection(url + dbName, 
       userName, password); 
     logger.info("get Initialized!!!"); 
     Statement st = conn.createStatement(); 
     ResultSet res = st.executeQuery("SELECT * FROM event"); 
     while (res.next()) { 
      int id = res.getInt("userid"); 
      String idUrl = res.getString("url"); 
      SnapProfile profile = new SnapProfile(id,idUrl); 
      snapList.getList().add(profile); 
     } 
     conn.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

В настоящее время реализации, по бревну, я не могу установить соединение, и сервер не ответ. Я предполагаю, что это потому, что я не установил файл pem, может ли кто-нибудь помочь мне пропустить настройку?

[INFO] Starting scanner at interval of 40 seconds. 
Feb 24, 2015 8:51:16 PM snap.sono.demo.impl.GeneralImpl getDbHello 
INFO: >>> enter getDbHello 
Feb 24, 2015 8:51:16 PM snap.sono.demo.impl.GeneralImpl getDbHello 
INFO: about to get access 
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. 

Благодаря

ответ

0

Это потому, что ваш AWS Instance настроен для подключения к порту 3306 с локального только, точнее разрешается подключать только с EC2-Instance IP.

Итак,
Войдите в свой AWS Console и отредактируйте выделенное Security Group Policy и сделайте это Разрешить подключение с любого IP-адреса.
Вы можете ссылаться на эту ссылку для редактирования групповой политики безопасности. Это для SSH, но процесс такой же для MySQL, за исключением того, что вам нужно будет добавить новое правило для MySQL.

.AWS REF.

Во-вторых, создание нового пользователя MySQL следующим
create user 'appuser'@'localhost' identified by 'pass123';
create user 'appuser'@'%' identified by 'pass123';
grant all privileges on *.* to 'appuser'@'localhost'
grant all privileges on *.* to 'appuser'@'%';
Так что вы могли бы подключиться к mysql с любого IP или если у вас есть статический то я предлагаю вам использовать это вместо % из-за проблем с безопасностью :)

+0

Я знаю, что, может быть, порт но в группе безопасности я предоставляю доступ с моего текущего ip, и, как вы можете видеть из моего сообщения, я могу получить доступ из ip, возможно, мне следует использовать ssh для локальной переадресации портов. –

+0

Я полагаю, вы предоставили SSH с вашего IP-адреса, поэтому telnet вашего EC2 на порт 3306 из вашей системы и посмотреть, можно ли подключиться. брандмауэр вашей системы может быть виновником. – Raja

Смежные вопросы