com.mysql.jdbc.salvedad.jdbc4.CommunicationsException: Falla del enlace de comunicaciones


Estoy trabajando en conseguir que mi base de datos hable con mis programas Java.

¿Puede alguien darme un programa de muestra rápido y sucio usando el JDBC?

Estoy recibiendo un error bastante estupendo:

Exception in thread "main" 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.ConnectionImpl.createNewIO(ConnectionImpl.java:2260)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:787)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)
    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.ConnectionImpl.getInstance(ConnectionImpl.java:357)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
    at java.sql.DriverManager.getConnection(DriverManager.java:582)
    at java.sql.DriverManager.getConnection(DriverManager.java:207)
    at SqlTest.main(SqlTest.java:22)
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 refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432)
    at java.net.Socket.connect(Socket.java:529)
    at java.net.Socket.connect(Socket.java:478)
    at java.net.Socket.<init>(Socket.java:375)
    at java.net.Socket.<init>(Socket.java:218)
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:293)
    ... 13 more

Contenido del archivo de prueba:

import com.mysql.jdbc.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class SqlTest {

    public static void main(String [] args) throws Exception {
        // Class.forName( "com.mysql.jdbc.Driver" ); // do this in init
        // // edit the jdbc url 
        Connection conn = DriverManager.getConnection( 
            "jdbc:mysql://localhost:3306/projects?user=user1&password=123");
        // Statement st = conn.createStatement();
        // ResultSet rs = st.executeQuery( "select * from table" );

        System.out.println("Connected?");
    }
}
Author: Eric Leschinski, 2010-06-06

26 answers

Por lo tanto, usted tiene un

Com.mysql.jdbc.salvedad.jdbc4.CommunicationsException: Falla del enlace de comunicaciones
java.net.ConnectException: Conexión rechazada

Cito de esta respuesta que también contiene un tutorial paso a paso de MySQL+JDBC:

Si obtiene un SQLException: Connection refused o Connection timed out o un CommunicationsException: Communications link failure específico de MySQL, entonces significa que la base de datos no es accesible en absoluto. Esto puede tener una o más de las siguientes causas:

  1. IP la dirección o nombre de host en la URL JDBC es incorrecta.
  2. El nombre de host en la URL JDBC no es reconocido por el servidor DNS local.
  3. El número de puerto falta o es incorrecto en la URL JDBC.
  4. El servidor DB está caído.
  5. El servidor DB no acepta conexiones TCP/IP.
  6. El servidor DB se ha quedado sin conexiones.
  7. Algo entre Java y DB está bloqueando conexiones, por ejemplo, un firewall o proxy.

Para resolver el uno o el otro, siga el siguientes consejos:

  1. Verifíquelos y pruébelos con ping.
  2. Actualice DNS o use la dirección IP en la URL JDBC en su lugar.
  3. Verificarlo basado en my.cnf de MySQL DB.
  4. Inicie la base de datos.
  5. Verifique si mysqld se inicia sin el --skip-networking option.
  6. Reinicie la base de datos y arregle su código en consecuencia para que cierre las conexiones en finally.
  7. Deshabilite firewall y/o configure firewall/proxy para permitir/reenviar el puerto.

Véase también:

 195
Author: BalusC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:03:05

Cojo esta excepción cuando Java está fuera del montón. Si trato de poner en la RAM muchos elementos de datos, primero atrapo" Falla del enlace de comunicaciones "y luego"OutOfMemoryError".

Lo registré y disminuyo el consumo de memoria (eliminar datos 1/2) y todo está bien.

 7
Author: user1694306,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-16 18:40:37

Esta excepción com.mysql.jdbc.exceptions.jdbc4.CommunicationsException se produce si la conexión a la base de datos está inactiva durante mucho tiempo.

Esta conexión inactiva devuelve true en connection.isClosed(); pero si intentamos ejecutar la instrucción, entonces activará esta excepción, por lo que sugeriré ir con la agrupación de bases de datos.

 6
Author: Yogesh Funde,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-26 16:46:53

Podría estar ladrando al árbol equivocado aquí, pero su excepción parece indicar que su servidor MySQL no está disponible.

Excepción en el hilo" main " com.mysql.jdbc.salvedad.jdbc4.Excepción de las comunicaciones: Fallo del enlace de comunicaciones El último paquete enviado con éxito al servidor fue 0 hace milisegundos. El controlador no ha recibido ningún paquete del servidor. en...

Qué sucede si lo intentas (desde el terminal)

mysql -u username -p

Se le pedirá que la contraseña asociada con el nombre de usuario. Después de dar la contraseña correcta ¿se conecta el cliente mysql?

Puede que tenga Que iniciar MySQL desde las Preferencias si no. También puede configurarlo para que se ejecute al inicio.

 5
Author: Karl Walsh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-06 10:03:51

He estado teniendo el mismo problema durante horas. Estoy usando MAMP Server

En lugar de usar localhost:[Puerto Apache], use su puerto MySQL.

A continuación se muestra el puerto MySQL predeterminado para el servidor MAMP.

String url = "jdbc:mysql://localhost:8889/db_name";

Connection conn = DriverManager.getConnection(url, dbUsername, dbPassword);
 5
Author: Abdul Rahim Mohamad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-30 02:21:25

Esta es la mejor solución,

 Connection con = DriverManager.getConnection(
 "jdbc:mysql://localhost:3306/DBname", "root", "root");

 Connection con = DriverManager.getConnection(
 "jdbc:mysql://192.100.0.000:3306/DBname", "root", "root");

Reemplazo de Localhost a su dirección IP

 4
Author: sureshAngamuthu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-04 05:43:48

Descargar MySQL-JDBC-Type-4-Treiber (i. g. 'mysql-connector-java-5.1.11-bin.jar 'from' mysql-connector-java-5.1.11.zip') en Mysql .

Necesita inculcar el jar del controlador durante la compilación y el tiempo de ejecución en su classpath.

Class.forName( "com.mysql.jdbc.Driver" ); // do this in init
// edit the jdbc url 
Connection conn = DriverManager.getConnection( "jdbc:mysql://MyDbComputerNameOrIP:3306/myDatabaseName", username, password );
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery( "select * from table" );
 3
Author: stacker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-06 06:50:38

Recibí el mismo error porque estaba tratando de ejecutar mi programa sin iniciar mysql server.

Después de iniciar el servidor mysql, todo salió bien.

 3
Author: rs2012,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-04 04:53:55

En mi caso, resulta que la versión de mysql-connector-java era demasiado alta.

En mi demo, de alguna manera uso mysql-connector-java así:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.9</version>
</dependency>

Pero en el entorno de desarrollo, uso esto:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.31</version>
</dependency>

Y mi versión de MySQL era 5.1.48(sí, es antigua, solo para imitar la versión del producto). Así que me encontré con el mismo error.

Puesto que se encuentra la razón, también se encuentra la solución. Coincide con la versión!

 3
Author: shellbye,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-02 02:54:08

Por favor, actualice su dirección IP en /etc/mysql/my.cnf file

bind-address  = <IP_ADDRESS>

Reinicie mysql deamon y los servicios mysql.

 3
Author: Sreedhar GS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-20 21:06:21

Las respuestas anteriores son apropiadas . Pero también me gustaría señalar una cuestión más genérica.

Me enfrenté a un problema similar y la razón fue una restricción de red de mi empresa.

La misma conexión estaba teniendo éxito cuando estaba en cualquier otra red.

 3
Author: user3251882,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-20 21:11:50

Acabo de experimentar esto.

Tengo que hacer que funcione por: (esto se puede colocar en el inicializador de bloques estáticos)

static{ // would have to be surrounded by try catch
    Class.forName("com.mysql.jdbc.Driver");   // this will load the class Driver
}

También obteniendo la conexión a través de:

conn = DriverManager.getConnection(DBURL,<username>,<password>);

En lugar de especificar los parámetros de inicio de sesión

  Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/projects?user=user1&password=123");

Saludos.

 2
Author: mel3kings,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-12 06:59:18

Si está utilizando el servidor WAMP o XAMP para instalar la base de datos mysql. Entonces usted tiene que iniciar explícitamente mysql sever de otro modo se mostrará com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure mientras se conecta con la base de datos

 2
Author: xrcwrn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-04 05:19:02

Mi mismo problema se resuelve siguiendo los siguientes pasos:

  1. Ir a mi.cnf

    vi /etc/mysql/my.cnf

  2. Modificar su dirección de enlace

    "#bind-address = 127.0.0.1"

  3. Reiniciar mysql

    sudo /etc/init.d/mysql restart

 2
Author: Haimei,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-04 05:44:04

Resolví este problema de una manera fácil, que funcionó para mí. tuve el problema de seme " com.mysql.jdbc.salvedad.jdbc4.CommunicationsException: Communications link failure"(en inglés). En mi db.archivo de propiedades tenía esto: url: jdbc: mysql: / / localhost: 90 / myDB, solo se eliminó la url del puerto, resultando de esta manera url: jdbc: mysql:/ / localhost / myDB y eso funcionó para mí.

 2
Author: Dario Castro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-16 15:20:06

Eso me pasó cuando cambié el puerto mysql de 3306 a 3307 en mi.ini y el php.archivos ini, pero después de cambiar los puertos (3307->3306) de nuevo funcionó bien.

 2
Author: MrPencil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-15 10:08:40

Si ha cambiado su puerto, obtendrá este tipo de error "com.mysql.jdbc.salvedad.jdbc4.CommunicationsException: Falla del enlace de comunicaciones" Compruebe su número de puerto

 2
Author: Maheshkumar.V,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-05 16:42:17

Tuve el mismo problema, y así es como se solucionó:

  1. My .jsp estaba llamando atributos que aún no había definido en el servlet.
  2. Tenía dos nombres de columna que estaba pasando a un objeto a través de ResultSet (getString("columnName")) que no coincidían con los nombres de columna en mi base de datos.

No estoy exactamente seguro de cuál solucionó el problema, pero funcionó. Además, asegúrese de crear un nuevo Statement y ResultSet para cada consulta de tabla.

 0
Author: user3427633,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-17 05:56:16

Podría ser un simple problema de tarro. puede ser que esté utilizando un mysql-connector-java-XXX-bin.jar antiguo que no es compatible con su versión actual de mysql. usé mysql-connector-java-5.1.18-bin.jar como estoy usando mysql 5.5 y este problema se resuelve para mí.

 0
Author: Ankit Jain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-04 05:42:07

Intenta cambiar localhost a 127.0.0.1.

El localhost se resolvería a ::1. Y MySQL no se puede conectar a través de IPv6 de forma predeterminada.

Y aquí está la salida de telnet localhost 3306:

$ telnet localhost 3306
Trying ::1...

Y no hay respuesta del servidor MySQL.

Por supuesto, asegúrese de que su servidor MySQL se esté ejecutando.

 0
Author: Haozhe Xie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-18 01:24:51

Lo resuelto para mí es hacer 2 cosas: 1. cree un nuevo usuario que no sea root con alguna contraseña usando los siguientes connads:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost';
FLUSH PRIVILEGES;

2. comentar la línea de dirección IP en mysqld.conf

Luego conéctese con un nuevo nombre de usuario y contraseña. debería funcionar.

 0
Author: Abdul Khalid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-16 08:06:43

Estaba tratando de conectarse a una versión anterior de MySQL ('version', '5.1.73' ); cuando se utiliza una versión de controlador más reciente se obtiene un error que le dice que utilice el "com.mysql.cj.jdbc.Driver o incluso que no tienes que especificar cuál usas:

Clase de carga com.mysql.jdbc.Driver'. This is deprecated. The new driver class is com.mysql.cj.jdbc.Conductor. El conductor es registrado automáticamente a través del SPI y carga manual del conductor la clase es generalmente innecesaria.

Cambié la declaración para usar 5.1.38 versión del mysql-connector-java y, en el código, mantuve el com.mysql.jdbc.Driver .

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.38</version>
</dependency>

Todo comenzó cuando vi la respuesta del Ankit Jain

 0
Author: manatico,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-12 23:07:13

Mi firewall estaba bloqueando post 3307 que mi MySQL escuchar en. Así que cambié el puerto de 3307 a 3306.Entonces puedo conectarme con éxito a una base de datos.

 0
Author: sipekmichal.cz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-07 06:17:20

Si hay algún lector que haya encontrado este problema para acceder al servidor remoto: asegúrese de que el puerto esté abierto

 -1
Author: aclokay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-28 13:11:34

Tal vez no iniciaste tu servidor Mysql y Apache. Después de iniciar el servidor Apache y Mysql desde el Panel de Control de XAMPP, la conexión se estableció con éxito.

¡Buena suerte!

 -1
Author: shivam gupta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-23 16:04:46

Me enfrenté al mismo problema en IntelliJ IDEA.

Para resolver el problema de conexión, tuve que desconectar (+F2 usando combinaciones de teclas predeterminadas en un mac) y vuelva a conectarse de nuevo. Solo presionar "refrescar" no fue suficiente.

 -3
Author: furins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-13 13:44:16