2015-04-24 70 views
1

似乎有足够的与CommunicationsException有关的问题发布在Stackoverflow上。但他们没有一个能够帮助我摆脱困境。MariaDB CommunicationsException:通信链接失败

我在CentOS的7服务器上安装MariaDB的5.5,并且配置的一切,让我可以远程通过MySQL工作台或数据源资源管理器在eclipse连接到数据库服务器。成功连接的屏幕截图如下所示。 enter image description here

但是,当我尝试通过JDBC连接数据库服务器时,它继续失败,异常“com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链接失败”。

测试类如下所示。

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 

我解决不了这个问题,所以我在互联网上搜索,我发现了一个清单,在here。但现在我可以通过IDE连接到我的数据库服务器,我不知道可能是错误的。

我也试过,而不是使用MySQL驱动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 

谁能告诉我我该怎么解决这个问题,或者给我一些暗示,为什么会发生?非常感谢。

+0

防火墙问题? – gustafbstrom

+0

@gustafbstrom我想不是。我配置了防火墙设置,并通过MySQL Workbench远程连接到我的数据库服务器。 – sincosmos

回答

0

的关键点计算的问题出在“java.net.SocketException异常:错误地址:连接”。

问题是由在客户端防火墙规则(我的Windows PC)引起的。我在客户端PC上启用了Ahnlab V3互联网安全个人防火墙。出站规则默认只允许某些类型的传出套接字。当我尝试使用工作台连接到远程服务器时,没有任何问题。但是当我尝试通过运行java Class连接到服务器时,本地防火墙保留了套接字,所以连接请求甚至没有通过我的网卡!我添加了一个允许mysql出站连接的新出站规则,然后我的程序正常运行。

希望这会帮助遇到同样问题的任何人。

相关问题