He instalado una instalación estándar de mysql 5.5, y aunque puedo conectarme al servicio mysql a través del comando mysql, y el servicio parece estar ejecutándose, no puedo conectarlo a través de spring + tomcat o desde un conector jdbc externo.
Estoy usando la siguiente URL:
jdbc:mysql://myserver.com:myport/mydb
con nombre de usuario / contraseña adecuados, pero recibo el siguiente mensaje:
server.com: 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.
y tiros de gato:
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.
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
Que parece ser el mismo problema que si intento conectarme externamente.
Respuestas:
Esto puede suceder por una variedad de razones. Lo vi hace unas semanas, pero no recuerdo cuál fue la solución para mí.
1) Verifique la dirección a la que está vinculado mysql, probablemente sea 127.0.0.1 (solo), que creo que es la predeterminada (al menos en el servidor Ubuntu estándar). Tendrá que comentar el parámetro bind-address en my.cnf para enlazar a todas las direcciones disponibles (no puede elegir múltiples, es una o todas).
2) Si está vinculado a 127.0.0.1 y no puede conectarse usando "localhost", asegúrese de que no se resuelva en la dirección localhost de IPv6 en lugar de IPv4. (o simplemente use la dirección IP)
3) Verifique dos y tres veces el puerto en el que mysql está escuchando.
4) Asegúrese de estar utilizando el conector JDBC correcto para su JDK.
5) Asegúrese de que no está haciendo algo realmente tonto como iniciar mysql con --skip-networking.
Creo que mi primera sugerencia es la más prometedora ... de hecho, creo que fue allí donde la vi recientemente ... Intenté conectarme a MySQL de forma remota (también en Ubuntu 8.04).
fuente
He tenido el mismo problema en dos de mis programas. Mi error fue este:
Paso algunos días para resolver este problema. He probado muchos enfoques que se han mencionado en diferentes sitios web, pero ninguno de ellos funcionó. Finalmente cambié mi código y descubrí cuál era el problema. Trataré de contarte sobre diferentes enfoques y resumirlos aquí .
Mientras buscaba internet para encontrar la solución a este error, descubrí que hay muchas soluciones que funcionaron para al menos una persona, ¡pero otras dicen que no funciona para ellas! ¿Por qué hay muchos enfoques para este error? Parece que este error puede ocurrir generalmente cuando hay un problema al conectarse al servidor . Quizás el problema se deba a una cadena de consulta incorrecta o a demasiadas conexiones a la base de datos.
¡Así que te sugiero que pruebes todas las soluciones una por una y no te rindas!
Aquí están las soluciones que encontré en Internet y para cada una de ellas, hay al menos en persona que su problema se ha resuelto con esa solución.
punto: para las soluciones que necesita para cambiar la configuración de MySQL, puede hacer referencia a lo siguiente no:
Linux: /etc/my.cnf
Windows: D: \ Archivos de programa \ mysql \ bin \ my.ini
Aquí están las soluciones:
Descomente el atributo "bind-address" o cámbielo a uno de los siguientes Ips:
bind-address = "127.0.0.1"
o
bind-address = "0.0.0.0"
Si hay una línea de "omisión de redes" en su archivo de configuración de MySQL, haga comentarios agregando el signo "#" al principio de esa línea.
Agregue estas líneas al archivo de configuración de MySQL:
wait_timeout = número
interactive_timeout = número
connect_timeout = número
Asegúrese de que el Firewall o el software antivirus no bloqueen el servicio MySQL.
Verifique su cadena de consulta. su cadena de conexión debería ser algo como esto:
Asegúrate de no tener espacios en tu cadena. Toda la cadena de conexión debe continuar sin ningún espacio de caracteres.
Intente reemplazar "localhost" con su puerto, como 127.0.0.1. También intente agregar el número de puerto a su cadena de conexión, como:
Por lo general, el puerto predeterminado para MySQL es 3306.
No olvide cambiar el nombre de usuario y la contraseña por el nombre de usuario y la contraseña de su servidor MySQL.
" max_allowed_packet " es una variable en el archivo de configuración de MySQL que indica el tamaño máximo de paquete, no el número máximo de paquetes. Por lo tanto, no ayudará a resolver este error.
cambie TOMCAT6_SECURITY = yes a TOMCAT6_SECURITY = no
use validationQuery = "select now ()" para asegurarse de que cada consulta tenga respuestas
Agregue este código a su cadena de conexión:
Aunque ninguna de estas soluciones funcionó para mí, le sugiero que las pruebe. Porque hay algunas personas que resolvieron su problema siguiendo estos pasos.
¿Pero qué resolvió mi problema? Mi problema fue que tenía muchos SELECT en la base de datos. Cada vez que creé la conexión y luego la cerré. Aunque cerré la conexión cada vez, pero el sistema se enfrentó a muchas conexiones y me dio ese error. Lo que hice fue que definí mi variable de conexión como una variable pública (o privada) para toda la clase y la inicialicé en el constructor. Luego, cada vez que usé esa conexión. Solucionó mi problema y también aumentó mi velocidad dramáticamente.
Conclusión
No hay una forma simple y única de resolver este problema. Le sugiero que piense en su propia situación y elija las soluciones anteriores. Si toma este error al comienzo del programa y no puede conectarse a la base de datos, es posible que tenga un problema en su cadena de conexión. Pero si toma este error después de varias interacciones exitosas con la base de datos, el problema podría estar relacionado con la cantidad de conexiones y puede pensar en cambiar "wait_timeout" y otras configuraciones de MySQL o reescribir su código de manera que eso reduzca la cantidad de conexiones.
fuente
Si está ejecutando una instalación de Linux, probablemente tenga lokkit bloqueando las comunicaciones entrantes, excepto a través de SSH.
Inicie sesión como root y ejecute el comando lokkit desde el indicador, desactive el firewall y SElinux y vea si tiene el mismo problema.
También verifique que sus permisos se hayan configurado correctamente, para que todo pueda escribir en las ubicaciones correctas.
fuente
También existe este gran error en la versión 5.1.9 del controlador mysql-jdbc:
http://bugs.mysql.com/bug.php?id=47494
fuente
Esto también puede ser causado por una configuración de proxy incorrecta . Tuve este problema al intentar conectarme a través de jdbc a una instancia de MySQL que se ejecuta en un dispositivo virtual Parallels en mi Mac. La conexión jdbc utiliza la configuración de red a nivel del sistema y, como estaba detrás de un proxy SOCKS, tuve que configurar el host MySql como un host no proxy (por ejemplo, en una Mac puede configurarlo en Configuración-> Red-> Avanzado- > Proxies y, finalmente, agregue el nombre de host o la dirección IP en "Evitar la configuración de proxy para estos hosts y dominios").
fuente
MySQL Connector / J solo admite TCP / IP Java no admite conectividad de sockets de dominio Unix
Si el MYSQL se inicia con un indicador de omisión de red o si MySQL se está ejecutando detrás del firewall, la opción TCP / IP está desactivada. Para que Java no pueda comunicarse con MySQL.
fuente
Tuve un problema muy similar durante casi un día, ¡y me volvió loco! pero logré encontrar la solución, y fue muy, muy simple, solo necesita /etc/init.d/tomcat6 para cambiar TOMCAT6_SECURITY = yes a TOMCAT6_SECURITY = no. no es mi solución, la encontré aquí , como pueden ver, estoy ejecutando ubuntu, espero que esto funcione.
fuente
Yo tuve el mismo problema. Cambió la propiedad "bind-address" en el archivo /etc/mysql/my.cnf a 0.0.0.0, y funciona. La línea correspondiente en my.cnf se ve así:
dirección de enlace = 0.0.0.0
Antes de que se configurara en la dirección IP externa del servidor, se veía algo así como:
dirección-enlace = 196.152.4.145
Creo que cuando está configurado en la dirección IP externa y no en el bucle localhost, el servidor mysql solo está conectado a la tarjeta de red y no escucha las conexiones del bucle local.
fuente
pruebe su dirección local para vincular la dirección en el archivo my.cnf
Conexión con = nulo;
fuente