web-dev-qa-db-fra.com

Erreur SQL: 0, SQLState: 08S01 Échec de la liaison de communication

Je reçois cette erreur (pas si souvent):

2013-05-08 16:44:35,786  WARN (JDBCExceptionReporter.Java:100) [org.hibernate.util.JDBCExceptionReporter, logExceptions] - SQL Error: 0, SQLState: 08S01
2013-05-08 16:44:35,786 ERROR (JDBCExceptionReporter.Java:101) [org.hibernate.util.JDBCExceptionReporter, logExceptions] - 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.
2013-05-08 16:44:35,833 ERROR (AdminDaoImpl.Java:297) [com.myapp.admin.db.AdminDaoImpl, createFilePackage] - data-upload: Exception while adding new file package
org.hibernate.exception.JDBCConnectionException: Cannot open connection
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.Java:97) [hibernate-core-3.3.2.GA.jar:3.3.2.GA]
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.Java:66) [hibernate-core-3.3.2.GA.jar:3.3.2.GA]
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.Java:52) [hibernate-core-3.3.2.GA.jar:3.3.2.GA]
    at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.Java:449) [hibernate-core-3.3.2.GA.jar:3.3.2.GA]
    at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.Java:167) [hibernate-core-3.3.2.GA.jar:3.3.2.GA]
    at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.Java:142) [hibernate-core-3.3.2.GA.jar:3.3.2.GA]
    at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.Java:85) [hibernate-core-3.3.2.GA.jar:3.3.2.GA]
    at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.Java:1354) [hibernate-core-3.3.2.GA.jar:3.3.2.GA]
    at com.myapp.admin.db.AdminDaoImpl. createFilePackage(AdminDaoImpl.Java:182) [AdminDaoImpl.class:na]
    at com.myapp.admin.ctrl.UploadController.processUploadZip(UploadController.Java:217) [UploadController.class:na]
    at Sun.reflect.GeneratedMethodAccessor106.invoke(Unknown Source) [na:na]
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:25) [na:1.6.0_35]
    at Java.lang.reflect.Method.invoke(Method.Java:597) [na:1.6.0_35]
    at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.Java:212) [spring-web-3.1.0.RELEASE.jar:3.1.0.RELEASE]
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.Java:126) [spring-web-3.1.0.RELEASE.jar:3.1.0.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.Java:96) [spring-webmvc-3.1.0.RELEASE.jar:3.1.0.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.Java:617) [spring-webmvc-3.1.0.RELEASE.jar:3.1.0.RELEASE]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.Java:578) [spring-webmvc-3.1.0.RELEASE.jar:3.1.0.RELEASE]
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.Java:80) [spring-webmvc-3.1.0.RELEASE.jar:3.1.0.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.Java:900) [spring-webmvc-3.1.0.RELEASE.jar:3.1.0.RELEASE]
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.Java:827) [spring-webmvc-3.1.0.RELEASE.jar:3.1.0.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.Java:882) [spring-webmvc-3.1.0.RELEASE.jar:3.1.0.RELEASE]
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.Java:789) [spring-webmvc-3.1.0.RELEASE.jar:3.1.0.RELEASE]
    at javax.servlet.http.HttpServlet.service(HttpServlet.Java:647) [servlet-api.jar:na]
    at javax.servlet.http.HttpServlet.service(HttpServlet.Java:728) [servlet-api.jar:na]
    at org.Apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.Java:305) [catalina.jar:7.0.35]
    at org.Apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.Java:210) [catalina.jar:7.0.35]
    at org.Apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.Java:222) [catalina.jar:7.0.35]
    at org.Apache.catalina.core.StandardContextValve.invoke(StandardContextValve.Java:123) [catalina.jar:7.0.35]
    at org.Apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.Java:472) [catalina.jar:7.0.35]
    at org.Apache.catalina.core.StandardHostValve.invoke(StandardHostValve.Java:171) [catalina.jar:7.0.35]
    at org.Apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.Java:99) [catalina.jar:7.0.35]
    at org.Apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.Java:118) [catalina.jar:7.0.35]
    at org.Apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.Java:407) [catalina.jar:7.0.35]
    at org.Apache.coyote.ajp.AjpProcessor.process(AjpProcessor.Java:200) [Tomcat-coyote.jar:7.0.35]
    at org.Apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.Java:589) [Tomcat-coyote.jar:7.0.35]
    at org.Apache.Tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.Java:310) [Tomcat-coyote.jar:7.0.35]
    at Java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.Java:886) [na:1.6.0_35]
    at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:908) [na:1.6.0_35]
    at Java.lang.Thread.run(Thread.Java:662) [na:1.6.0_35]
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

J'ai deux applications Web (spring mvc + hibernate + mysql) hébergées sur un serveur partagé:

1) application principale pour afficher les fichiers à télécharger (qui est insérée via l'application admin)

2) application d'administration avec opérations CRUD

Cette erreur apparaît parfois lorsque j'utilise une application "admin" pour télécharger des fichiers pour une application "principale". Supposons que cela se produise après le téléchargement/traitement avec succès de 100 à 120 fichiers/requêtes et à chaque requête frappant la base de données avec 10-20 insert/mettre à jour des requêtes.

Détails de l'hébergement:

Private Tomcat hosting
Java 1.6.0_35-b10
Tomcat 7.0.35
heap size 288MB
MySQL Server 5
commons-dbcp 1.2.2
mysql-connector-Java 5.1.9

Propriétés de la base de données + Hibernate + DBCP:

<bean id="dbDataSource" class="org.Apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="username" value="test" />
    <property name="password" value="test" />
    <property name="url" value="jdbc:mysql://localhost/my_database?useUnicode=yes&characterEncoding=UTF-8" />

    <!-- DBCP Connection Pool Settings -->
    <property name="defaultAutoCommit" value="true" />
    <property name="initialSize" value="10" />
    <property name="maxActive" value="500" />
    <property name="maxIdle" value="8" />
    <property name="minIdle" value="0" />
    <property name="maxWait" value="30000" />
    <property name="validationQuery" value="SELECT 1" />
    <property name="testOnBorrow" value="true" />
    <property name="testOnReturn" value="false" />
    <property name="testWhileIdle" value="false" />
    <property name="timeBetweenEvictionRunsMillis" value="-1" />
    <property name="numTestsPerEvictionRun" value="3" />
    <property name="minEvictableIdleTimeMillis" value="180000" />
    <property name="poolPreparedStatements" value="true" />
    <property name="maxOpenPreparedStatements" value="25" />
    <property name="accessToUnderlyingConnectionAllowed" value="false" />
    <property name="removeAbandoned" value="false" />
    <property name="removeAbandonedTimeout" value="300" />
    <property name="logAbandoned" value="false" />
</bean>

hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.hbm2ddl.auto=none
hibernate.jdbc.batch_size=100
hibernate.show_sql=false
hibernate.format_sql=false
hibernate.cache.use_second_level_cache=true
hibernate.cache.use_query_cache=false
hibernate.cache.provider_class=org.hibernate.cache.NoCacheProvider
hibernate.current_session_context_class=thread

Code concerné:

public String createFilePackage(FilePackage package) {
    String message = "";

    Session session = getSessionFactory().openSession();
    Transaction tx = null;
    try {
        tx = session.beginTransaction();

        // handling package, around 10-14 DB insert, 10 SELECT and 5 update queries on same session

        tx.commit();

    } catch(Exception e) {
        logger.error("file-upload: Exception while adding new font package", e);
        if(tx != null) { tx.rollback(); }
    } finally {
        session.close();
    }
    return message;
}

des conseils sur la façon de résoudre ce problème?

12
spring_dev101

La liaison de communication entre le pilote et la source de données à laquelle le pilote tentait de se connecter a échoué avant le traitement de la fonction . C'est donc généralement une erreur réseau. Cela pourrait être dû à des pertes de paquets ou à un commutateur/pare-feu mal configuré. 

13
Maciej Cygan

Vérifiez le fichier de configuration du serveur /etc/mysql/my.cnf - verify bind_address n'est pas défini sur 127.0.0.1. Définissez-le sur 0.0.0.0 ou commentez-le, puis redémarrez le serveur avec:

Sudo service mysql restart
3
morajp2000