2016-01-14 2 views
0

Здравствуйте, к любимому сообществу StackOverflow.Ошибка доступа к базе данных MySQL удаленно с помощью Java

Итак, я новичок в разработке Java и MySQL, и, короче говоря, я пытаюсь подключить устройства через Интернет с использованием базы данных MySQL (и инструментов, предоставляемых MySQL Workbench (v5.6)), мой компьютер в качестве сервера и Java-программу, которую я создал. И все, что без предоставления имени домена, но мой IP-адрес сервера. Я провел свое исследование, но теперь я в такой ситуации, когда мне приходится кричать о помощи.

Проблема: Кажется, что все работают JUST FINE, когда переменная connect получает соединение от localhost:3306, НО я просто хочу получить к ней доступ из Интернета, и я пробовал различные вещи, которые просто не сработали.

Отказ 1 - я пытался манипулировать my.ini файл на C: \ ProgramData \ MySQL Workbench 5.6 \ установив bind-address на 127.0.0.1, то на мой IPv4 я получил от ipconfig (CMD), а затем " mypublicip 'от http://www.whatismypublicip.com/.

и не работает.

Отказ 2 - я пытался изменить соединение с MySQL Workbench ->Hostname = 'mypublicip', port = 3306, Username и Password, как это было, когда я тестировал его с Hostname = локальный.

Это просто не работает для MySQL Workbench. Я не мог подключиться к своему серверу из Workbench, и когда я попытался настроить диалог Remote Management, я не знал, что работает, а что нет.

Отказ 3 - я пытался держать в Hostname = локальный в Workbench, и я изменил метод getConnection() вернуть соединение с «mypublicip» ф. Я не мог работать с моим IPv6 (я не знаю, как его использовать в getConnection()), поэтому я использовал общедоступный идентификатор, который я нашел от http://www.whatismypublicip.com/. Когда я это сделал, произошла ошибка : «Не удается подключиться к серверу базы данных. Ошибка связи . Последний пакет, успешно отправленный на сервер, был 0 миллисекунд назад. Драйвер не получил никаких пакетов с сервера ». , Вот почему я пробовал сбой №1

Это код моего приложения Java, который создает соединение между программой и db. connectMessage является JFrame, что дает соответствующее сообщение пользователю об успехе или провале связи, код ошибки и сообщение об ошибке:

package aPackage; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 

/** 
* 
* @author manosmer 
*/ 
public class MySQLConnector { 
    private Connection connect; 

    public MySQLConnector(){ 
     connect = null; 
    } 

    public Connection connecting(UsersInfo user) throws ClassNotFoundException{ 
     try{ 
      Class.forName("com.mysql.jdbc.Driver");   
      connect = DriverManager.getConnection("jdbc:mysql://localhost:3306/connectmessages", user.getName(), user.getPassword()); 

      connectMessage messageconn = new connectMessage(); 
      messageconn.setConnection(connect, user); 

     }catch(SQLException ex){ 
      UserLogin errorlogin = new UserLogin(); 
      connectMessage messageconn = new connectMessage(); 
      messageconn.failed(ex); 
     } 
     return connect; 
    } 
} 
+2

'128.0.0.1'? надеюсь, это просто опечатка ... если вы имели в виду 127.0.0.1, то это НЕ действительный адрес «интернет». он не является маршрутизируемым и предназначен для того, чтобы позволить машине разговаривать с самим собой. вы не можете разговаривать с 127.0.0.1 в другой машине, потому что ВСЕ ip-машины автоматически 127.0.0.1 –

+1

у вас возникли проблемы с удаленным удаленным и локальным работами, так почему вы вставляете код из своего локального соединения? вставьте код, с которым у вас проблемы. – eis

+0

@MarcB да, я сделал опечатку там .... Я знаю это, вот почему это сработало ... вам не хватает точки, я думаю –

ответ

0

Я нашел проблему! Реальная проблема заключалась в том, что я не открывал порт на моем брандмауэре маршрутизатора, чтобы программа имела доступ через Интернет! Перейдите в свой интернет-мастер, сделайте порт (тот же, что и ваш сервер MySQL), и примените его к серверной машине. Затем вы должны найти свой IP-адрес и использовать его в своем коде. Это все! Счастливое кодирование.

0

Если ваш SQL сервер за маршрутизатором, попробуйте перенаправить трафик от некоторых порт маршрутизатора на ваш серверный порт MySql.

+0

Можете ли вы, пожалуйста, сказать мне, как это сделать? –

+0

Вы должны получить настройки маршрутизатора, а затем выполнить его в соответствии с инструкциями для маршрутизатора. – eg04lt3r

+0

Может ли это оказать нежелательное влияние на мое текущее подключение к Интернету? Смогу ли я получить доступ к Интернету с моего ПК после этого? –

0

Все, что вы пробовали до сих пор, является полной противоположностью тому, что вы должны были делать. Вызов сервера MySQL для привязки к 127.0.0.1 или «localhost» будет предотвратить любое соединение извне локального хоста.

Что вам нужно сделать, это привязать его к 0.0.0.0 и открыть порт 3306 в вашем брандмауэре.

+0

Спасибо, я уже сам ответил на мою проблему, но спасибо! –

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