代码之家  ›  专栏  ›  技术社区  ›  Olie

Java Driver.getConnection()在实时系统上从mysql产生“拒绝连接”,而不是dev

  •  3
  • Olie  · 技术社区  · 17 年前

    这里有一些非常简单的东西——我只是对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.<init>(Socket.java:367)
        at java.net.Socket.<init>(Socket.java:209)
        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: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.<init>(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$ 
    
    8 回复  |  直到 17 年前
        1
  •  16
  •   Cosmin    14 年前

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

    在MySQL配置文件中,我碰巧设置了 绑定地址 到机器的IP。我没有设置它 127.0.0.1 ,或 0.0.0.0 因此,MySQL将接受来自外部的JDBC连接,但不接受内部的连接。只有从本地计算机连接时,我才被拒绝连接。

    将该地址更改为 0.0.0.0 允许它监听对任何IP的请求。这允许内部和外部IP。

    希望这能帮助那些犯了和我一样愚蠢错误的人。请查看上述评论 netstat -an | grep 3306 .

        2
  •  6
  •   Olie    17 年前

    呸!很抱歉,我刚刚设置了“仅限本地连接”。我对java应用程序在本地运行的事实感到困惑(看起来是“本地连接”,但因为它是通过TCP连接的,所以它是“远程”连接,即使它起源于localhost。

    我最终会学会如何管理这些东西。同时,我希望别人能从我的错误中吸取教训。

    感谢所有花时间帮助我的人。从那以后,我允许了“远程”连接,但我的所有用户帐户都是“用户名”@“本地主机”( 也就是 ,没有允许任何计算机连接的“用户名”@“%”。)希望我至少把那部分说对了。

    再次感谢!

        3
  •  2
  •   Uri    17 年前

    此外,请确保MySQL服务器的数据库用户帐户允许来自除localhost以外的其他地址的连接。出于安全原因,在较小的服务器中,可以(也可能是默认的?)限制与localhost的连接,这样只有本地web应用程序可以使用神奇的编号用户/密码组合访问数据库。

        4
  •  1
  •   Yoni Roit    17 年前

    “拒绝连接”消息只有一个原因,不管是mysql还是其他服务。 服务器没有在监听。 尝试使用“netstat-an”和grep对端口3306进行验证。

        5
  •  0
  •   Milhous    17 年前

    您是否已验证可以使用名称和密码连接到服务器上的数据库。

    此外,如果您通过url连接,则不需要以下行。

    properties.setProperty("socket", "/Applications/MAMP/tmp/mysql/mysql.sock");
    

    上述属性似乎特定于Os X。您是否在Os X上运行服务器?

        6
  •  0
  •   MetroidFan2002    17 年前

    您的URL中有localhost。您是否正在尝试连接到网络上的此服务器?您的URL可能不正确。

        7
  •  0
  •   asad raza    13 年前

    /*答案日期是过期,但我的答案是未来*/

    我也有同样的问题。

    我该怎么解决?

    答案:

    打开您的Xamp或其他服务器, 只需运行MYSQL。.. . 如果SQL没有运行,则会抛出异常。

        8
  •  -1
  •   Milhous    17 年前

    这是我在os X上运行mysql的代码

    public SQL(String host, String port, String database, String userid, String password)
        {
            queryType = QUERYTYPE.Single;
            String driver = "org.gjt.mm.mysql.Driver";
            String url = "jdbc:mysql://" + host;
            if (port != null)
                {
                    url += ":" + port;
                }
            else
                {
                    url += ":" + defaultPort;
                }
            url += "/" + database;
            try
                {
                    Class.forName(driver);
    
                    connection = DriverManager.getConnection(url, userid, password);
                }
            catch (Exception e)
                {
                    e.printStackTrace();
                }
        }