无法使用JDBC在Windows 7上连接到MySQL,但是可以通过phpmyadmin和其他管理工具工作吗?

Har*_*eep 5 java mysql windows jdbc

TL; DR:

每次我尝试使用JDBC连接到本地MySQL服务器(适用于大量其他sql客户端)时,它根本不连接,我得到一个例外:

  • 线程"main"中的异常com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链接失败
  • .... 堆栈跟踪 ....
  • 引起:java.net.SocketException:无效的参数:connect

更详细的信息:

我有一个运行的本地MySQL服务器,我可以使用以下信息连接到:

  • 地址:localhost或127.0.0.1(均可工作)
  • 港口:3306
  • 和我的用户名/密码/ db名称

使用应用程序:HeidiSQL,phpmyadmin,MySQL Workbench和mysqladmin

运行mysqladmin版本确认服务器已启动,正常工作,并启用了tcp/ip.

mysqladmin变量显示"skip_networking"已关闭(完整配置见下文).

MySQL日志没有显示任何异常(也在下面).

我正在使用JDBC连接器v5.1.15,mysql-connector-java-5.1.15-bin.jar.它在Eclipse的项目类路径中.

所有Windows 7(Ultimate,64bit,如果重要的话)防火墙都关闭了.

然而,我仍然得到堆栈跟踪错误,如下所示.我不能为我的生活找出什么是错的,当其他一切都能够连接得很好......

我试图在下面包含所有相关信息.我希望它只是一些简单而愚蠢的东西,我忽略了,找不到因为我看起来太难了......但是呃谁知道:/嘿.

我用尽了一切我已经能够在其他类似的问题在网上找到,但似乎没有任何工作(包括/sf/answers/208961861/,/sf/answers/147216471/,https://serverfault.com/questions/89955/unable-to-connect-to-mysql-through-jdbc-connector-through-tomcat-or-externally和others)

我的测试代码:

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);
    }

}
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪: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
Run Code Online (Sandbox Code Playgroud)

MySQL日志:

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
Run Code Online (Sandbox Code Playgroud)

Har*_*eep 2

事实证明,是 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
Run Code Online (Sandbox Code Playgroud)