Не удается подключиться к MySQL в Windows 7 с помощью JDBC, но работает через phpmyadmin и другие инструменты администратора? - PullRequest
5 голосов
/ 15 марта 2012

TL; DR:

Каждый раз, когда я пытаюсь использовать JDBC для подключения к локальному серверу MySQL (который работает на множестве других клиентов sql), он вообще не подключается, и я получаю исключение:

  • Исключение в потоке "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: сбой линии связи
  • .... трассировка стека ....
  • Причина: java.net.SocketException: неверный аргумент: connect

Более подробная информация:

У меня работает локальный сервер MySQL, к которому я могу подключиться, используя следующую информацию:

  • адрес: localhost или 127.0.0.1 (оба работают)
  • порт: 3306
  • и мое имя пользователя / пароль / имя базы данных

Использование приложений: HeidiSQL, phpmyadmin, MySQL Workbench и mysqladmin

Запуск mysqladmin version подтверждает, что сервер работает, работает и включен tcp / ip.

Выполнение переменных mysqladmin показывает, что «skip_networking» выключен (полный текст конфигурации приведен ниже).

В журнале MySQL нет ничего необычного (также ниже).

Я использую JDBC-соединитель v5.1.15, mysql-connector-java-5.1.15-bin.jar. Это в моем пути к классам проекта с Eclipse.

Все брандмауэры Windows 7 (Ultimate, 64-битные, если это имеет значение) отключены.

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

Я попытался включить всю необходимую информацию ниже. Я надеюсь, что это просто что-то простое и глупое, что я упустил из виду и не могу найти, потому что я смотрю слишком усердно ... но кто знает: / хех.

Я перепробовал все, что смог найти в других подобных вопросах в Интернете, но, похоже, ничего не работает (вкл. https://stackoverflow.com/a/2985169/211750, https://stackoverflow.com/a/2103092/211750, https://serverfault.com/questions/89955/unable-to-connect-to-mysql-through-jdbc-connector-through-tomcat-or-externally и другие )

Мой тестовый код:

package sqltest;


import com.mysql.jdbc.Driver;
import java.sql.DriverManager;
import java.util.Properties;

public class main {

    public static void main(String[] args) throws Exception {
        String url = "jdbc:mysql://localhost:3306/dbname?user=user&password=****&";        

        Driver driver = (Driver) Class.forName("com.mysql.jdbc.Driver").newInstance();

        DriverManager.getConnection(url);
    }

}

Трассировка стека: http://pastebin.com/qv332y86

Дамп переменных MySQL: http://pastebin.com/merSEDdD

My.ini: http://pastebin.com/EWZX2enz

MySQL версия mysqladmin :

Server version          5.5.20-log
Protocol version        10
Connection              localhost via TCP/IP
TCP port                3306
Uptime:                 1 min 37 sec

Threads: 1  Questions: 17  Slow queries: 0  Opens: 33  Flush tables: 1  Open tables: 26  Queries per second avg: 0.175

MySQL log:

120314 21:37:20 [Note] Plugin 'FEDERATED' is disabled.
120314 21:37:20 InnoDB: The InnoDB memory heap is disabled
120314 21:37:20 InnoDB: Mutexes and rw_locks use Windows interlocked functions
120314 21:37:20 InnoDB: Compressed tables use zlib 1.2.3
120314 21:37:20 InnoDB: Initializing buffer pool, size = 128.0M
120314 21:37:20 InnoDB: Completed initialization of buffer pool
120314 21:37:20 InnoDB: highest supported file format is Barracuda.
120314 21:37:20  InnoDB: Waiting for the background threads to start
120314 21:37:21 InnoDB: 1.1.8 started; log sequence number 1619921
120314 21:37:21 [Note] Event Scheduler: Loaded 0 events
120314 21:37:21 [Note] wampmysqld: ready for connections.
Version: '5.5.20-log'  socket: ''  port: 3306  MySQL Community Server (GPL)
120314 21:38:02 [Note] wampmysqld: Normal shutdown

120314 21:38:02 [Note] Event Scheduler: Purging the queue. 0 events
120314 21:38:02  InnoDB: Starting shutdown...
120314 21:38:02  InnoDB: Shutdown completed; log sequence number 1619921
120314 21:38:02 [Note] wampmysqld: Shutdown complete

Ответы [ 2 ]

2 голосов
/ 16 марта 2012

Оказалось, что Java предпочитает, чтобы IPv6 все испортил, поэтому мне пришлось добавить -Djava.net.preferIPv4Stack = true, но, поскольку я запускал вещи под tomcat, мне пришлось пройти обходной путь установки свойства. Я не уверен, что стандартный способ сделать это (если таковые имеются), но я получил его, отредактировав Catalina.bat и добавив -Djava.net.preferIPv4Stack = true в конец файла. См:

rem Execute Java with the applicable properties
if not "%JPDA%" == "" goto doJpda
if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity
%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.net.preferIPv4Stack=true -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
goto end
:doSecurity
%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.net.preferIPv4Stack=true -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
goto end
:doJpda
if not "%SECURITY_POLICY_FILE%" == "" goto doSecurityJpda
%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %JPDA_OPTS% %DEBUG_OPTS% -Djava.net.preferIPv4Stack=true -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
goto end
:doSecurityJpda
%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %JPDA_OPTS% %DEBUG_OPTS% -Djava.net.preferIPv4Stack=true -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
goto end

:end
0 голосов
/ 19 октября 2012

или для tomcat, CATALINA_OPTS можно установить в переменной окружения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...