Domanda

Sono in esecuzione Ubuntu e sto in ultima analisi, tentando di connettersi Tomcat al mio database MySQL utilizzando JDBC.

Si è lavorato in precedenza , ma dopo un riavvio l'istanza ora non riesce a connettersi.

  • Sia Tomcat 6 e MySQL 5.0.75 sono sulla stessa macchina
  • stringa di connessione: jdbc: mysql: /// localhost: 3306
  • I in grado di connettersi a MySQL nella riga di comando utilizzando il comando mysql
  • Il file my.cnf è abbastanza standard (disponibile su richiesta) ha indirizzo bind: 127.0.0.1
  • non posso Telnet alla porta di MySQL nonostante netstat dicendo MySQL è in ascolto
  • Ho un'iptables regola per inoltrare 80 -.> 8080 e nessun firewall io sappia

Sono abbastanza nuovo a questo e non sono sicuro che altro da test. Non so se devo essere alla ricerca in etc / interfacce e se ho fatto cosa cercare. E 'strano perché è usato per lavoro, ma dopo un riavvio è giù così devo aver cambiato qualcosa ....:).

Mi rendo conto che un timeout indica che il server non risponde e presumo che sia perché la richiesta non è in realtà sempre attraverso. Ho installato MySQL tramite apt-get e Tomcat manualmente.

processi di mysqld

root@88:/var/log/mysql#  ps -ef | grep mysqld
root     21753     1  0 May27 ?        00:00:00 /bin/sh /usr/bin/mysqld_safe
mysql    21792 21753  0 May27 ?        00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-external-locking --port=3306 --socket=/var/run/mysqld/mysqld.sock
root     21793 21753  0 May27 ?        00:00:00 logger -p daemon.err -t mysqld_safe -i -t mysqld
root     21888 13676  0 11:23 pts/1    00:00:00 grep mysqld

Netstat

root@88:/var/log/mysql# netstat -lnp | grep mysql
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      21792/mysqld
unix  2      [ ACC ]     STREAM     LISTENING     1926205077 21792/mysqld        /var/run/mysqld/mysqld.sock

Connessione giocattolo Classe

root@88:~# cat TestConnect/TestConnection.java

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class TestConnection {

  public static void main(String args[]) throws Exception {
    Connection con = null;

    try {
      Class.forName("com.mysql.jdbc.Driver").newInstance();
      System.out.println("Got driver");
      con = DriverManager.getConnection(
                "jdbc:mysql:///localhost:3306",
                "uname", "pass");
      System.out.println("Got connection");

      if(!con.isClosed())
        System.out.println("Successfully connected to " +
          "MySQL server using TCP/IP...");

    } finally {
        if(con != null)
          con.close();
    }
  }
}

Giocattolo classe di connessione di uscita

Nota:. Questo è lo stesso errore che ottengo da Tomcat

root@88:~/TestConnect# java -cp mysql-connector-java-5.1.12-bin.jar:. TestConnection
Got driver
                Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 1 milliseconds ago. The driver has not received any packets from the server.
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
        at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122)            
        at TestConnection.main(TestConnection.java:14)
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
        at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122)
        at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344)
        at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2181)
        ... 12 more
Caused by: java.net.ConnectException: Connection timed out
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        ... 13 more

Telnet uscita

root@88:~/TestConnect# telnet localhost 3306
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection timed out
È stato utile?

Soluzione

spettacoli Netstat che MySQL è infatti in ascolto sulla porta 3306 su tutti gli indirizzi locali. Dal momento che il telnet non riesce a connettersi a 127.0.0.1 ci è un firewall che arresta il vostro si -. Tenta esecuzione sudo ufw default allow ad esso effectivly disabilitare o sudo ufw allow 3306 e vedere se fa tutte le modifiche

Altri suggerimenti

Che cosa significa il vostro / etc / hosts file di assomigliare? Hai una voce come la seguente?

127.0.0.1   localhost

Puoi provare a telnet:

telnet 127.0.0.1 3306 or telnet 127.0.0.1:3306

o JDBC collegarsi a:

jdbc:mysql://127.0.0.1:3306

La stringa di connessione deve essere

jdbc:mysql://localhost:3306

anziché

jdbc:mysql:///localhost:3306

Anche su Unix / Linux, per default la comunicazione client / server avviene tramite il file di socket UNIX e non via TCP / IP. Quindi non si è in grado di telnet alla porta 3306 sulla macchina locale.

Sono stati sempre usando la stessa firma per il metodo getConnection, o è che una delle cose modificati prima che ha smesso di funzionare? (Il '///' nei suggerimenti stringa è stata una recente aggiunta.)

Se questo è il nuovo codice, si potrebbe provare la seguente stringa di connessione:

String dbUrl = "jdbc: mysql: // localhost: 3306 / [dB] user = [utente] & password = [password]"; Connection conn = DriverManager.getConnection (dbUrl);

Questo è il formato ad esempio sulla pagina di documentazione mysql.com:

http: //dev.mysql .com / doc / refman / 5.0 / es / connettore-J-usagenotes-basic.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top