2011-03-31 624 views
1

我试图使用Java连接MYSQL数据库,其中我的SQL数据库位于本地主机上。我遇到了一些关于通信链路故障的问题。MySQL:通信链路失败错误和telnet localhost 3306:连接关闭

public testfile() throws ClassNotFoundException, SQLException{ 

     Connection connection = null; 
     try{ 
     Class.forName("com.mysql.jdbc.Driver").newInstance(); 
     connection = DriverManager.getConnection("jdbc:mysql://localhost/rts?user=root&password=password"); 
     System.out.println("Connected"); 
     } 
     catch(Exception ex) 
     { 
      ex.printStackTrace(); 
     } 
     finally 
     { 
      if(connection != null) 
       connection.close(); 
     } 
} 

堆栈跟踪:

com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: 

** BEGIN NESTED EXCEPTION ** 

java.net.ConnectException 
MESSAGE: Connection refused 

STACKTRACE: 

java.net.ConnectException: Connection refused 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:327) 
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:193) 
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180) 
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:384) 
    at java.net.Socket.connect(Socket.java:546) 
    at java.net.Socket.connect(Socket.java:495) 
    at java.net.Socket.<init>(Socket.java:392) 
    at java.net.Socket.<init>(Socket.java:235) 
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256) 
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:271) 
    at com.mysql.jdbc.Connection.createNewIO(Connection.java:2771) 
    at com.mysql.jdbc.Connection.<init>(Connection.java:1555) 
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285) 
    at java.sql.DriverManager.getConnection(DriverManager.java:620) 
    at java.sql.DriverManager.getConnection(DriverManager.java:222) 
    at test.testfile.<init>(testfile.java:18) 
    at test.mainfile.main(mainfile.java:9) 


** END NESTED EXCEPTION ** 



Last packet sent to the server was 1 ms ago. 
    at com.mysql.jdbc.Connection.createNewIO(Connection.java:2847) 
    at com.mysql.jdbc.Connection.<init>(Connection.java:1555) 
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285) 
    at java.sql.DriverManager.getConnection(DriverManager.java:620) 
    at java.sql.DriverManager.getConnection(DriverManager.java:222) 
    at test.testfile.<init>(testfile.java:18) 
    at test.mainfile.main(mainfile.java:9) 

的Telnet输出:

telnet localhost 3306 
Trying 127.0.0.1... 
Connected to localhost. 
Escape character is '^]'. 
Connection closed by foreign host. 

封装/软件信息:

  • 的Eclipse的Java EE IDE的Web开发。
  • 版本:赫利俄斯服务发布1
  • JDK6
  • 连接器/ J版本5.0.8
  • Ubuntu的:Ubuntu的10.04 LTS-的清醒山猫

我已经试过几件事情,但它不“T工作:

  • 我在my.cnf改端口,但没有效果,我改成3312 相同的重复犯错和telnet节目如下:

     
    [email protected]:~$ telnet localhost 3306 
    Trying 127.0.0.1... 
    telnet: Unable to connect to remote host: Connection refused 
    [email protected]:~$ telnet localhost 3312 
    Trying 127.0.0.1... 
    Connected to localhost. 
    Escape character is '^]'. 
    Connection closed by foreign host. 
    

    nmap的输出:

     
    [email protected]:~$ nmap localhost -p 3306 
    
    Starting Nmap 5.00 ([url]http://nmap.org[/url]) at 2011-03-31 09:45 IST 
    Interesting ports on localhost (127.0.0.1): 
    PORT  STATE SERVICE 
    3306/tcp closed mysql 
    
    Nmap done: 1 IP address (1 host up) scanned in 0.11 seconds 
    [email protected]:~$ nmap localhost -p 3312 
    
    Starting Nmap 5.00 ([url]http://nmap.org[/url]) at 2011-03-31 09:45 IST 
    Interesting ports on localhost (127.0.0.1): 
    PORT  STATE SERVICE 
    3312/tcp open unknown 
    
    Nmap done: 1 IP address (1 host up) scanned in 0.06 seconds 
    
  • 我试图把在hosts.allow中入境,但没有效果

  • 我曾尝试重新安装的MySQL。通过mysql提示符和c程序插入数据完美,但不通过java代码。

  • 我试图在IP表添加规则还是它不帮助

  • 我已经试过URL字符串的不同组合。我也尝试过不同版本的Eclipse和连接器/ J的jar文件(最新5.1.15)

+0

根据您的原始代码格式:Stackoverflow不使用UBB。它使用Markdown。我已经为你修好了。对于将来的文章,请在阅读编辑器工具栏的同时阅读右边的[格式规则]列(http://stackoverflow.com/editing-help)。 – BalusC 2011-03-31 05:05:34

回答

0

您需要授予权限连接通过端口3306的用户......这家伙有一个很好的解释:link

+0

如果它是一个套接字权限问题,它应该是'AccessControlException',而不是'ConnectException'。如果这是一个MySQL权限问题,它将会是一个'ConnectException',消息'拒绝访问',而不是'连接被拒绝'。 – BalusC 2011-03-31 05:13:18

+0

您的权利...我也没有注意到提供的telnet示例。过去我曾经有过这个问题。 – jeverest 2011-03-31 05:18:39

1

首先尝试使用MYSQL Command Line Client使用程序中使用的相同凭据连接到MySQL。

1

java.net.ConnectException:连接被拒绝

我们根本没有监听/接受给定主机/端口上的连接。验证以下内容:

  • 验证在my.cnf如果端口确实是3306
  • 验证是否DB开始(使用MySQL数据库管理工具)。
  • 验证数据库是否接受TCP/IP连接,mysqld不应该有--skip-networking选项。
  • 验证数据库是否没有用完连接,如有必要,重新启动它,并相应地修复所有现有Java代码,以正确关闭finally块中的连接。
  • 验证在给定端口上的哪些块连接之间没有防火墙/代理。
相关问题