首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java Driver.getConnection()在活动系统上产生来自mysql的“拒绝连接”,而不是开发

Java Driver.getConnection()在活动系统上产生来自mysql的“拒绝连接”,而不是开发
EN

Stack Overflow用户
提问于 2008-12-14 19:12:47
回答 8查看 34.6K关注 0票数 3

非常直截了当的东西,这里--我只是对mysql不够好,无法理解它想从我这里得到什么。

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

任何帮助跟踪这将是最感谢的。

谢谢!

测试代码

代码语言:javascript
复制
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();
    }
}

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

代码语言:javascript
复制
olie$ java mysqltest
Main started.
Start of getDBConnection.
Properties set.
driver.newInstance gotten.
Connection gotten: com.mysql.jdbc.Connection@c980c9.
olie$ 

服务器输出(我试图跟踪的错误)(删除了一些空行)。

代码语言:javascript
复制
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$ 
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2008-12-15 05:20:42

哇!我很抱歉--我刚刚建立了“本地联系”。我对java应用程序在本地运行这一事实感到困惑(因此它似乎是一个“本地连接”,但是,由于它是通过TCP连接的,所以它是一个“远程”连接,尽管它起源于本地主机。

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

感谢所有花时间帮助我的人。我允许“远程”连接,但我所有的用户帐户都是'username'@'localhost“(也就是说,没有‘用户名’@‘%’,这将允许任何机器连接。)希望至少我的部分是正确的。”

再次感谢!

票数 6
EN

Stack Overflow用户

发布于 2011-04-07 05:33:43

只是在这个问题上的一个有用的笔记。我至少花了30分钟来调试相同的错误,这是我的错误。

在我的MySQL conf文件中,我碰巧将绑定ADDR设置为机器的IP。我没有将其设置为127.0.0.10.0.0.0。因此MySQL将接受来自外部的JDBC连接,但不接受内部的JDBC连接。只有从本地机器连接时,我才会被拒绝连接。

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

希望这能帮助那些犯了我同样愚蠢错误的人。使用上面关于netstat -an | grep 3306的评论来检查它。

票数 16
EN

Stack Overflow用户

发布于 2008-12-14 20:37:21

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/366861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档