java - Kan ikke oprette forbindelse til MySQL på Windows 7 ved hjælp af JDBC, men fungerer via phpmyadmin og andre admin værktøjer?

Indlæg af Hanne Mølgaard Plasc

Problem



TL; DR:


Hver gang jeg forsøger at bruge JDBC til at oprette forbindelse til en lokal MySQL-server (der fungerer på tonsvis af andre sql-klienter), forbinder den slet ikke og jeg får en undtagelse:



  • Undtagelse i tråd 'main' com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Kommunikationslinkfejl

  • .... stak spor ....

  • Forårsaget af: java.net.SocketException: Ugyldigt argument: tilslut



Mere detaljeret info:


Jeg har en lokal MySQL-server kører, som jeg kan oprette forbindelse til ved at bruge følgende information:



  • adresse: localhost eller 127.0.0.1 (begge arbejder)

  • port: 3306

  • og mit brugernavn/kodeord/db navn



Brug af applikationerne: HeidiSQL, phpmyadmin, MySQL Workbench og mysqladmin


At køre mysqladmin version bekræfter, at serveren er op, arbejder og har tcp/ip aktiveret.


At udføre mysqladmin-variabler viser, at 'skip\_networking' er slukket (se nedenfor for fuld config).


MySQL-loggen viser intet ud over det sædvanlige (også nedenfor).


Jeg bruger JDBC-stik v5.1.15, mysql-connector-java-5.1.15-bin.jar. Det er i min projektklassevej med Eclipse.


Alle Windows 7 (Ultimate, 64bit hvis det betyder noget) firewalls er slukket.


Endnu får jeg stadig sporfejlen som vist nedenfor. Jeg kan ikke for livet af mig finde ud af, hvad der er galt, når alt andet er i stand til at forbinde lige fint ...


Jeg har forsøgt at medtage alle relevante oplysninger nedenfor. Jeg håber det er bare noget simpelt og dumt, jeg har overset og kan ikke finde, fordi jeg ser for hårdt ud ... men hvem ved:/heh .


Jeg har prøvet alt jeg har kunnet finde i andre lignende spørgsmål online, men intet synes at virke (inkl. 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 and others) ]] [7]


Min testkode:


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

}


Stack spor: http://pastebin.com/qv332y86[8]


MySQL-variabler dump: http://pastebin.com/merSEDdD[9]


My.ini: http://pastebin.com/EWZX2enz[10]


MySQL mysqladmin version :


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

Bedste reference


Det viste sig, at Java foretrak IPv6, så jeg måtte tilføje ting, så jeg var nødt til at tilføje -Djava.net.preferIPv4Stack=sandt, men da jeg kørte ting under tomcat, måtte jeg gennemgå en rund måde at indstille ejendommen på. Jeg er ikke sikker på, hvilken standard måde at gøre det er (hvis nogen), men jeg fik det til at fungere ved at redigere Catalina.bat og tilføje -Djava.net.preferIPv4Stack=true til slutningen af ​​filen. Se:


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

Andre referencer 1


eller for tomcat, kan CATALINA\_OPTS indstilles i miljøvariabel