programing

마리아DB 커뮤니케이션즈예외:통신 링크 장애

telecom 2023. 9. 7. 21:29
반응형

마리아DB 커뮤니케이션즈예외:통신 링크 장애

커뮤니케이션과 관련된 질문이 충분해 보입니다.스택 오버플로에 예외가 게시되었습니다.하지만 그들 중 누구도 저를 곤란한 위치에서 벗어나게 해주지 않습니다.

제 센트에 MariaDB 5.5를 설치했습니다.OS 7 서버, 그리고 이클립스에서 MySQL Workbench 또는 Data Source Explorer를 통해 원격으로 DB 서버에 연결할 수 있도록 모든 것을 구성했습니다.성공한 연결에 대한 화면 캡처는 아래와 같습니다.enter image description here

그러나 JDBC를 통해 DB 서버를 연결하려고 하면 예외 "com.mysql.jdbc.exceptions.jdbc4"로 계속 실패합니다.커뮤니케이션즈예외:통신 링크 장애".

테스트 클래스는 다음과 같습니다.

package com.pratice;
import java.sql.*;
public class DatabaseConn {
    public static void main(String[] args) throws Exception{
        Connection conn = null;
        ResultSet rs = null;
        Statement stmt = null;
        String url = "jdbc:mysql://59.12.140.121:6330/myPrjs";//?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true
        String username = "user";
        String password = "password";
        String driver = "com.mysql.jdbc.Driver";

        try{
            Class.forName(driver);

            conn = DriverManager.getConnection(url, username, password);
            stmt = conn.createStatement();
            rs = stmt.executeQuery("SELECT 1");

            while(rs.next()){
                System.out.print(rs.getObject(1) + "\t" + rs.getObject(2));
            }
        }finally{
            if(rs!=null) {  
                rs.close();  
            }  
            if(stmt!=null) {  
                stmt.close();  
            }  
            if (conn != null) {  
                conn.close();  
            }  
        }
    }
}

DatabaseConn을 실행하면 오류 메시지가 나타납니다.

Exception in thread "main" 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(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1127)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:356)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2502)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2539)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2321)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:832)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:417)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:344)
    at java.sql.DriverManager.getConnection(DriverManager.java:571)
    at java.sql.DriverManager.getConnection(DriverManager.java:215)
    at com.webjsp.pratice.DatabaseConn.main(DatabaseConn.java:18)
Caused by: java.net.SocketException: Bad address: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:579)
    at java.net.Socket.connect(Socket.java:528)
    at java.net.Socket.<init>(Socket.java:425)
    at java.net.Socket.<init>(Socket.java:241)
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:258)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:306)
    ... 15 more

저는 이 문제를 해결할 수 없어서 인터넷으로 찾아봤는데 여기서 체크리스트를 찾았는데 IDE로 DB서버에 접속할 수 있게 되어 무엇이 잘못되었는지 모르겠습니다.

mysql driver 대신 org.mariadb.jdbc.driver를 사용하려고 했는데 오류 메시지도 왔습니다.

Exception in thread "main" java.sql.SQLNonTransientConnectionException: Could not connect to 59.12.140.121:6330 : Bad address: connect
        at org.mariadb.jdbc.internal.SQLExceptionMapper.get(SQLExceptionMapper.java:136)
        at org.mariadb.jdbc.internal.SQLExceptionMapper.throwException(SQLExceptionMapper.java:106)
        at org.mariadb.jdbc.Driver.connect(Driver.java:115)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at DatabaseConn.main(DatabaseConn.java:16)
Caused by: org.mariadb.jdbc.internal.common.QueryException: Could not connect to 59.12.140.121:6330
: Bad address: connect
        at org.mariadb.jdbc.internal.mysql.MySQLProtocol.connect(MySQLProtocol.java:714)
        at org.mariadb.jdbc.internal.mysql.MySQLProtocol.<init>(MySQLProtocol.java:280)
        at org.mariadb.jdbc.Driver.connect(Driver.java:111)
        ... 3 more
Caused by: java.net.SocketException: Bad address: 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 java.net.Socket.connect(Unknown Source)
        at org.mariadb.jdbc.internal.mysql.MySQLProtocol.connect(MySQLProtocol.java:387)
        at org.mariadb.jdbc.internal.mysql.MySQLProtocol.connect(MySQLProtocol.java:709)
        ... 5 more

누가 이 문제를 어떻게 해결할 수 있는지 말해 줄 수 있나요? 아니면 왜 이런 일이 발생하는지 힌트를 줄 수 있나요?정말 감사합니다.

문제를 해결할 수 있는 핵심 포인트는 "java.net "에 있습니다.SocketException: 잘못된 주소: connect".

클라이언트 측(내 Windows PC)의 방화벽 규칙으로 인해 문제가 발생했습니다.클라이언트 PC에서 Ahnlab V3 Internet Security Personal Firewall을 활성화했습니다.아웃바운드 규칙은 기본적으로 특정 유형의 나가는 소켓만 허용합니다.워크벤치로 원격 서버에 접속을 시도했을 때는 문제가 없었습니다.그런데 자바 클래스를 실행해서 서버에 접속하려고 하니 로컬 방화벽이 소켓을 유지하고 있어서 접속 요청이 네트워크 카드를 통과하지도 않았습니다!mysql 아웃바운드 연결을 허용하는 새로운 아웃바운드 규칙을 추가하면 프로그램이 정상적으로 실행됩니다.

이것이 같은 문제를 겪는 사람들에게 도움이 되기를 바랍니다.

언급URL : https://stackoverflow.com/questions/29842790/mariadb-communicationsexception-communications-link-failure

반응형