Java Driver.getConnection () выдает «Отказано в соединении» из mysql на работающей системе, а не dev

Здесь довольно простые вещи - я просто недостаточно хорош в 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$ 
14.12.2008 19:12:47
8 ОТВЕТОВ

Вы проверили, что можете подключиться к базе данных на сервере, указав имя и пароль.

Также, если вы подключаетесь через URL, вам не нужна следующая строка.

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

Вышеуказанное свойство кажется специфичным для Os X. Вы используете сервер на OS X?

0
14.12.2008 19:34:39
Да, я могу подключиться к mysql из командной строки с указанным именем пользователя и паролем. Да, сервер находится на OS-X (как и моя система разработки - все те же версии java, OSX, mysql.) И вы правы, что свойство "socket" set-никак не влияет на то, работает приложение или нет ,
Olie 14.12.2008 20:00:00

Ваш URL содержит localhost. Вы пытаетесь подключиться к этому серверу в сети? Ваш URL может быть неверным.

0
14.12.2008 20:33:59

Также убедитесь, что учетная запись пользователя вашего сервера MySQL для пользователя базы данных разрешает соединения с других адресов, кроме localhost. По соображениям безопасности на небольших серверах можно (и, возможно, по умолчанию?) Ограничить подключения к localhost, чтобы только локальное веб-приложение могло получить доступ к базе данных, используя комбинацию пользователя и пароля с волшебным номером.

2
14.12.2008 20:37:21

Есть только одна причина для сообщения «отказано в соединении», не говоря уже о том, является ли это mysql или любым другим сервисом. Сервер не слушает. Попробуйте "netstat -an" и grep для порта 3306, чтобы проверить его.

1
14.12.2008 21:16:56
Хорошо, netstat -an | grep 3306 ничего не возвращает - это шаг в правильном направлении. Э-э ... mysql явно работает. И я могу войти в систему из командной строки. Я так понимаю, есть какая-то конфигурация для включения прослушивания 3306 ...?
Olie 15.12.2008 04:50:01
Вы входите в систему из командной строки на том же компьютере или на другом компьютере?
Uri 15.12.2008 06:19:48

Вот мой код, который работает на MySQL на OS X

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();
            }
    }
-1
15.12.2008 04:13:19
РЕШЕНИЕ

Ба! Мои извинения - я только что настроил "только локальные соединения". Я был смущен тем фактом, что Java-приложение работало локально (так что казалось «локальным соединением», но, поскольку оно соединяется через TCP, это «удаленное» соединение, даже если оно происходит на локальном хосте).

В конце концов я научусь управлять этими вещами. В то же время, я надеюсь, что кто-то еще может учиться на моих ошибках.

Спасибо всем, кто нашел время, чтобы помочь мне. С тех пор я разрешил «удаленные» подключения, но все мои учетные записи пользователей имеют имя «username» @ «localhost» ( т. Е. Не существует «username» @ «%», что позволило бы подключиться к любой машине.) Надеюсь, По крайней мере, я правильно понял эту часть.

Еще раз спасибо!

6
15.12.2008 05:20:42
И спасибо Ужину (почетное упоминание Ури) за подсказки, которые мне понадобились, чтобы в конечном итоге понять это. + голосует за вас обоих.
Olie 15.12.2008 05:21:56
Нет проблем. Я влюбился в это давно. Я использовал DB2 и переключился на MySQL
Uri 15.12.2008 06:20:37

Просто полезная заметка на эту тему. Я потратил не менее 30 минут, пытаясь отладить ту же ошибку, и это была моя ошибка.

В моем файле конфигурации MySQL мне довелось установить BIND ADDR на IP машины. Я не установил его 127.0.0.1или 0.0.0.0. Таким образом, MySQL будет принимать соединения JDBC извне, но не изнутри. Я получал отказ в соединении только при подключении с локальной машины.

Изменение этого адреса 0.0.0.0позволило ему прослушивать запросы на любой IP. Это допускается как для внутренних, так и для внешних IP-адресов.

Надеюсь, это поможет кому-то, кто совершил ту же глупую ошибку, что и я. Проверьте это с комментарием выше netstat -an | grep 3306.

16
24.01.2012 11:55:48
Спасибо! Я мог бы получить удаленные соединения, но не localhost. 0.0.0.0 решил мою собственную проблему. Спасибо за добавление этой «полезной заметки».
Phistrom 2.09.2012 02:39:38
Спасибо Спасибо спасибо! Как Linux / MySQL n00b это меня и спасло, и научило!
Sebastian Nemeth 24.02.2014 12:59:29

/ * дата ответа истекает, но мой ответ для будущего * /

У меня такая же проблема.

Как я могу решить это?

Ответ:

Откройте свой Xammp или другой сервер и просто запустите MYSQL .... Если SQL не запущен, это исключение выдаст.

0
25.06.2013 03:35:05