当前位置:  开发笔记 > 编程语言 > 正文

Java Driver.getConnection()在live系统上从mysql产生"Connection Refused",而不是dev

如何解决《JavaDriver.getConnection()在live系统上从mysql产生"ConnectionRefused",而不是dev》经验,为你挑选了2个好方法。

非常简单的东西,在这里 - 我对mysql不够好,无法理解它对我的要求.

我有一个简短的java测试用例,在我的开发系统上打开mysql上的连接但是,当我尝试将它放到我的服务器上时,它失败了.

任何帮助追踪这一点将是非常感谢.

谢谢!

测试代码

import  java.util.*;
import  java.sql.*;

public  class   mysqltest {

    static  public  void  getDBConnection() {
        System.out.println ("Start of getDBConnection.");

        Connection  conn        = null;
        String      url         = "jdbc:mysql://localhost:3306/";
        String      dbName      = "magnets_development";
        String      driver      = "com.mysql.jdbc.Driver";
        String      userName    = "*****";  // blanked for publication
        String      password    = "*****";

        try {
            Class.forName (driver).newInstance();
            System.out.println ("driver.newInstance gotten.");
            conn = DriverManager.getConnection (url+dbName, userName, password);
            System.out.println ("Connection gotten: " + conn + ".");
            Statement sql     = conn.createStatement ();
            ResultSet results = sql.executeQuery ("use " + dbName + ";");
        }
        catch (Exception ex) {
            System.out.println ("*** Got exception.");
            ex.printStackTrace();
        }
    }

    public static void main(String args[]) {
        System.out.println ("Main started.");
        mysqltest.getDBConnection();
    }
}

开发系统输出 (预期/正确响应)

olie$ java mysqltest
Main started.
Start of getDBConnection.
Properties set.
driver.newInstance gotten.
Connection gotten: com.mysql.jdbc.Connection@c980c9.
olie$ 

服务器输出 (错误我正在尝试追踪)(删除了一些空行.)

mini$ java mysqltest
Main started.
Start of getDBConnection.
Properties set.
driver.newInstance gotten.
*** Got exception.
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.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432)
    at java.net.Socket.connect(Socket.java:520)
    at java.net.Socket.connect(Socket.java:470)
    at java.net.Socket.(Socket.java:367)
    at java.net.Socket.(Socket.java:209)
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256)
    at com.mysql.jdbc.MysqlIO.(MysqlIO.java:271)
    at com.mysql.jdbc.Connection.createNewIO(Connection.java:2771)
    at com.mysql.jdbc.Connection.(Connection.java:1555)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
    at java.sql.DriverManager.getConnection(DriverManager.java:525)
    at java.sql.DriverManager.getConnection(DriverManager.java:140)
    at mysqltest.getDBConnection(mysqltest.java:34)
    at mysqltest.main(mysqltest.java:49)

** END NESTED EXCEPTION **

Last packet sent to the server was 3 ms ago.
    at com.mysql.jdbc.Connection.createNewIO(Connection.java:2847)
    at com.mysql.jdbc.Connection.(Connection.java:1555)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
    at java.sql.DriverManager.getConnection(DriverManager.java:525)
    at java.sql.DriverManager.getConnection(DriverManager.java:140)
    at mysqltest.getDBConnection(mysqltest.java:34)
    at mysqltest.main(mysqltest.java:49)
mini$ 

小智.. 16

关于这个主题只是一个有用的说明.我花了至少30分钟试图调试相同的错误,这是我的错误.

在我的MySQL配置文件中,我碰巧将BIND ADDR设置为机器的IP.我没有把它设置为127.0.0.1,或0.0.0.0.所以MySQL会接受来自外部的JDBC连接,但不接受内部的JDBC连接.我只是在从本地机器连接时才收到Connection Refused.

更改该地址以0.0.0.0允许它侦听对任何IP的请求.这允许内部和外部IP.

希望这能帮助那些犯了同样愚蠢错误的人.检查上面的评论netstat -an | grep 3306.



1> 小智..:

关于这个主题只是一个有用的说明.我花了至少30分钟试图调试相同的错误,这是我的错误.

在我的MySQL配置文件中,我碰巧将BIND ADDR设置为机器的IP.我没有把它设置为127.0.0.1,或0.0.0.0.所以MySQL会接受来自外部的JDBC连接,但不接受内部的JDBC连接.我只是在从本地机器连接时才收到Connection Refused.

更改该地址以0.0.0.0允许它侦听对任何IP的请求.这允许内部和外部IP.

希望这能帮助那些犯了同样愚蠢错误的人.检查上面的评论netstat -an | grep 3306.



2> Olie..:

呸! 我道歉 - 我刚刚设置了"仅限本地连接".我对Java应用程序在本地运行这一事实感到困惑(因此它似乎是一个"本地连接",但因为它是通过TCP连接的,所以它是一个"远程"连接,即使它起源于localhost.

我最终将学习如何管理这些东西.与此同时,我希望其他人可以从我的错误中吸取教训.

感谢所有花时间帮助我的人.我已经允许"远程"连接,但我的所有用户帐户都只是'用户名'@'localhost'(没有'用户名'@'%',这将允许任何机器连接.)希望,至少,我得到了那个部分.

再次感谢!

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有