2016-10-15 3 views
0

나는 많은 질문을 받았다. 그러나 많은 해결책을 찾으려 고 시도한 후에 나는 내 DB에 연결할 수 없다.Java jdbc가 원격 LAN 서버의 mariadb에 연결

저는 PC에서 일하고 있으며 LAN상의 다른 컴퓨터에서 mariadb mysql 서버에 연결하려고합니다. 하지만 내 프로그램이 어디서나 내 mysql 서버에 연결할 수있는 방식으로하고 싶습니다. mysql이있는이 컴퓨터뿐만 아니라 LAN에있는 PC도 마찬가지입니다.

외부 IP를 사용하고 라우터에서 mysql 포트를 전달하면 트릭을 수행 할 수 있다고 생각되지만 '통신 실패'오류가 발생합니다.

지금까지 내가 확신했다 :

  • -user, DB 이름이 올바른지
  • -port이며, 통과하는 것은 기본 3306
  • -in MySQL의 설정 I 장애인 바인드-ADRESS
  • -in입니다 mysql 내 사용자는 모든 호스트와 외부 IP에서 연결할 수 있습니다 ...
  • - 데이터베이스가 비어 있습니다.
  • - 다른 데이터베이스가 작동 중입니다. php can co nnect하지만 동일한 서버에서 실행되므로 'localhost'에 연결 중임
  • -DriverManager.getConnection ("jdbc : mysql : // MY_IP : 3306/my_DB", "javauser", "javauserpass");
  • - mysql 서버가 설치된 컴퓨터 (UbuntuServer) iptables가 구성되지 않았습니다.
  • -I xampp가 설치되어 거기에 db가 생성되었습니다. 로그인 쿼리 문자열에 'localhost'를 사용하여이 db에 연결할 수 있습니다. 하지만 그건 내 프로그램이 로컬에서만 작동하도록 만든다.
  • -inactive 방화벽은 아무것도 변경하지 않습니다 - 여전히 연결

오류 :

-------- MySQL JDBC Connection Testing ------------ 
MySQL JDBC Driver Registered! 
Connection Failed! Check output console 
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) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) 
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:989) 
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:341) 
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2251) 
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2284) 
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2083) 
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:806) 
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) 
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:410) 
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:328) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at Main.main(Main.java:25) 
Caused by: java.net.ConnectException: Connection timed out: connect 
    at java.net.DualStackPlainSocketImpl.connect0(Native Method) 
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source) 
    at java.net.PlainSocketImpl.connect(Unknown Source) 
    at java.net.SocksSocketImpl.connect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:211) 
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:300) 
    ... 15 more 

내 예를 들어, 테스트 프로그램은 여기에서 가져온 것입니다 : https://www.mkyong.com/jdbc/how-to-connect-to-mysql-with-jdbc-driver-java/

를 그래서 나는 어디에 만드는 중이라서 잘못?

+0

이 의미는 무엇이며 데이터베이스 연결과 어떤 관련이 있습니까? "내 프로그램은 내 LAN 외부의 PC에서 친구들이 편집 할 수 있습니다" –

+0

이것은 전혀 이해가되지 않습니다. 친구가 당신의 LAN 외부 또는 심지어 당신의 LAN 내에서 프로그램을 편집 할 수있게하려면 GitHub 또는 BitBucket에 소스 코드를 호스팅하십시오. 당신의 mariadb 연결로하는 일은 절대적으로 당신의 프로그램을 편집하는 친구들과 아무런 관련이 없습니다. –

+0

모든 Java 비트를 1 초 동안 무시합니다. 'telnet '(또는'nc ')을하면 어떻게됩니까? 이 예외는 연결 시간 초과 예외 일 뿐이므로 다른 네트워크에 있거나 포트가 방화벽으로 연결된 것처럼 보입니다. –

답변

0

데이터베이스의 구성 파일에서 MySQL/MariaDB bind-address 변수를 확인하십시오. Then configure it appropriately. 아마도 로컬 호스트에만 바인딩되도록 설정되었을 것입니다.

+0

두 줄을 모두 주석 처리했는데, 내 외부 IP를 넣으려고했다. 도움이되지 않았다. 방화벽이 비활성화되어 있습니다. 라우터가 내 서버 컴퓨터로 3306을 전달하고 있습니다. – Mike