No se puede conectar a MySQL con JDBC - Tiempo de espera de conexión - Ubuntu 9.04

StackOverflow https://stackoverflow.com/questions/2938543

  •  05-10-2019
  •  | 
  •  

Pregunta

Estoy corriendo Ubuntu y estoy en última instancia, tratando de conectar Tomcat a mi base de datos MySQL usando JDBC.

Se ha trabajado previamente , pero después de un reinicio de la instancia ya no puede conectarse.

  • Tanto Tomcat 6 y MySQL 5.0.75 están en la misma máquina
  • Cadena de conexión: jdbc: mysql: /// localhost: 3306
  • I se puede conectar a MySQL en la línea de comandos con el comando mysql
  • El fichero my.cnf es bastante estándar (disponible bajo petición) tiene la dirección aprieto: 127.0.0.1
  • No puedo telnet al puerto de MySQL a pesar netstat diciendo MySQL escuche
  • Tengo una regla iptables para reenviar 80 -.> 8080 y no hay cortafuegos yo sepa

Estoy bastante nuevo en esto y no estoy seguro de qué más prueba. No sé si debería estar buscando en etc / interfaces y si lo hiciera lo que debe buscar. Es raro, porque se utiliza para el trabajo, pero después de un reinicio es hacia abajo de manera que debe haber cambiado algo ....:.)

Me doy cuenta de un tiempo de espera indica que el servidor no está respondiendo y yo supongo que es debido a que la solicitud no es en realidad conseguir a través. He instalado MySQL a través de apt-get y Tomcat manualmente.

procesos 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

Conexión Toy Class

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

Juguete clase de conexión de salida

Nota:. Este es el mismo error que recibo de 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

Salida Telnet

root@88:~/TestConnect# telnet localhost 3306
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection timed out
¿Fue útil?

Solución

Netstat muestra que MySQL es, en efecto escuchando en el puerto 3306 en todas las direcciones locales. Como Telnet no puede conectarse a 127.0.0.1 hay es un servidor de seguridad que impide su le -. Intente ejecutar sudo ufw default allow a ella effectivly desactivar o sudo ufw allow 3306 y ver si se hace algún cambio

Otros consejos

¿Qué hace su etc / hosts mirada / archivo como? ¿Tiene una entrada como la siguiente?

127.0.0.1   localhost

Se puede tratar de telnet:

telnet 127.0.0.1 3306 or telnet 127.0.0.1:3306

o JDBC conecte con:

jdbc:mysql://127.0.0.1:3306

La secuencia de la conexión debe ser

jdbc:mysql://localhost:3306

en lugar de

jdbc:mysql:///localhost:3306

También en Unix / Linux, por defecto, la comunicación cliente / servidor se realiza a través del archivo de socket Unix y no a través de TCP / IP. Por lo tanto no es capaz de telnet al puerto 3306 en la máquina local.

¿Era usted siempre utilizando la misma firma para el método getConnection, o es que una de las cosas que haya modificado antes de que dejó de funcionar? (La '///' en las sugerencias de cuerda que era una adición reciente.)

Si esto es nuevo código, puede probar con la siguiente cadena de conexión:

Cadena dbUrl = "jdbc: mysql: // localhost:? 3306 / [dB] user = [usuario] y password = [contraseña]"; Conexión conn = DriverManager.getConnection (dbUrl);

Este es el formato de ejemplo de la página de documentación mysql.com:

http: //dev.mysql .com / doc / RefMan / 5.0 / es / conector-j-usagenotes-basic.html

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top