4 Stimmen

MYSQL 8 Stunden Time out Problem

Ich verwende MYSQL 5.0 und Tomcat 5.5. Nach 8 Stunden schließt MYSQL standardmäßig alle untätigen Verbindungen und ich erhalte eine SQL-Ausnahme, die eine Lösung für dieses Problem darstellt.

7voto

Jon Skeet Punkte 1325502

Welchen Verbindungspool verwenden Sie? Die meisten erlauben die regelmäßige Ausführung eines Heartbeat-Befehls, damit die Verbindungen nicht ins Leere laufen.

EDIT: Ein Blick auf die DBCP-Konfigurationsseite Ich denke, Sie sollten eine angemessene (billige) validationQuery . Sie könnten dann entweder DBCP anweisen, dies zu testen, wenn möglicherweise inaktive Verbindungen entfernt werden ( testWhileIdle ) oder sagen Sie ihm, dass er kurz vor der Rückgabe der Verbindung testen soll ( testOnBorrow ). Die erste würde (hoffentlich!) Ihre ungenutzten Verbindungen aufrechterhalten; die zweite nicht, aber sie würde Ihnen unterbrochene Verbindungen nicht zurückgeben (d.h. sie würde eine neue herstellen, wenn nötig).

2voto

Fredrik Mörk Punkte 151006

Meinen Sie damit, dass Sie die Verbindungen aufrechterhalten, während sie im Leerlauf sind? Ich bin kein Experte für mySql, aber in den Datenbanken, mit denen ich gearbeitet habe, gilt es als gute Praxis, die Verbindung nur solange offen zu halten, wie sie benötigt wird, und sie dann zu schließen.

1voto

Ich weiß nicht, wie man die Zeitüberschreitung erhöhen kann, aber ich denke, es sollte eine Einstellung geben. Warum erstellen Sie die Verbindung nicht, wenn Sie sie benötigen, und schließen sie, nachdem Sie sie benutzt haben, anstatt von einer erstellten Verbindung abhängig zu sein?

1voto

Danny D'Amours Punkte 702

Bei MySQL wird eine offene Verbindung (die oft in einem Verbindungspool wartet) standardmäßig nach 8 Stunden Inaktivität geschlossen. Sie können diese Zeit von 8 Stunden ändern, indem Sie die wait_timeout-Variable entweder in Ihrer my.cnf oder in unserer mysql-Befehlszeile konfigurieren

Siehe: http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_wait_timeout http://dev.mysql.com/doc/refman/5.0/en/gone-away.html

0voto

Diese Frage wurde vor ein paar Jahren gestellt, aber ich denke, dass es gut ist, die richtige Antwort zu haben. Ich hatte das gleiche Problem, zu lösen, musste ich mit der Konfiguration ein wenig spielen. hier ist, was für mich funktioniert. Weitergehen https://people.apache.org/~fhanik/jdbc-pool/jdbc-pool.html für weitere Informationen. Der unten stehende Code hat alles erledigt. Es gibt Möglichkeiten, die Werte zu optimieren, aber darum werde ich mich später kümmern.

<Resource name="jdbc/database" 
               auth="Container" 
               type="javax.sql.DataSource"
               maxActive="100" 
               maxIdle="30" 
               maxWait="10000"
          username="username" password="password" 
          driverClassName="com.mysql.jdbc.Driver"
          url="jdbc:mysql:///"
          factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"
          testWhileIdle="true"
          testOnBorrow="true"
          testOnReturn="false"
          validationQuery="SELECT 1"
          validationInterval="30000"`enter code here`
          timeBetweenEvictionRunsMillis="30000"
          minIdle="10" `enter code here`
          initialSize="10"
          removeAbandonedTimeout="60"
          removeAbandoned="true"
          logAbandoned="true"
          minEvictableIdleTimeMillis="30000" 
          jmxEnabled="true"         
           />

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X