sql >> Databasteknik >  >> RDS >> Mysql

Kan inte ansluta till databasen efter några gångers driftsättning på servern

I dina konfigurationsegenskaper har du använt c3p0-egenskapen maxIdleTime, men c3p0-egenskaperna konfigureras med c3p0. prefix eller hibernate.c3p0. . Observera att aktivera någon av c3p0 egenskaper aktiverar automatiskt motsvarande anslutningsleverantör genom vilolägesheuristik. I loggen syns inte att du använder c3p0. Om du inte är konfigurerade datakällor kommer Hibernate att använda hibernate.connection.provider_class org.hibernate.connection.DriverManagerConnectionProvider . Denna anslutningsleverantör har en inbyggd rudimentär anslutningspool för vilken du kan ställa in en hibernate.connection.pool_size , men den används endast för utvecklingsändamål. Använd den aldrig i produktionsmiljön.

Du kan ha oändliga diskussioner om ämnet Hur man fixar java.net.SocketException:Broken pipe . Efter en tid kommer du att inse att du har varit öppen anslutningar i poolen, som plötsligt stängs på andra sidan av följande skäl:

  • Brandväggar eller routrar kan slå ner på lediga anslutningar (MySQL-klient-/serverprotokollet fungerar inte).
  • MySQL-servern kan stänga inaktiva anslutningar som överskrider wait_timeout ellerinteractive_timeout tröskel.

Följande tips kan användas för att felsöka dessa problem:

  • En nyligen (5.1.13+) version av JDBC-drivrutinen används.
  • Se till att wait_timeout och interactive_timeout är inställda tillräckligt högt. Kontrollera om interactiveClient används.
  • Se till att tcpKeepalive är aktiverad.
  • Se till att alla konfigurerbara brandväggs- eller routerinställningar tillåter den maximala förväntade vilotiden för anslutningen.
  • Se till att anslutningarna är giltiga när de används från anslutningspoolen. Använd en fråga som börjar med /* ping */ att köra en lätt ping istället för en fullständig fråga. Observera att syntaxen för ping måste vara exakt som specificeras här.
  • Verifiera anslutningen uttryckligen innan du använder den om anslutningen har lämnats inaktiv under en längre tid.
  • Minimera hur länge ett anslutningsobjekt lämnas inaktivt medan annan programlogik körs.

För att uppfylla vissa av dessa alternativ är det bättre att använda en anslutningspool som du kan använda med Hibernate. Hibernate har stöd för commons-dbcp, c3p0 och proxool. Du kan också konfigurera JNDI-datakällan på webbservern att använda med viloläge, den har en anslutningspool. Se kapitel 7 Anslutningspoolning med Connector/J .

Om du vill konfigurera Hibernate med c3p0 bör du läsa detta Så här konfigurerar du C3P0-anslutningspoolen . För dbcp-exempelkonfiguration bör du kolla detta inlägg MySQL, Hibernate och Broken Pipe Exception . Vilken anslutningspoolning du än använder är upp till dig.



  1. CodeIgniter-konfigurationsteckenuppsättning och UTF-8-stöd

  2. SQL Server 2005 Pivot på okänt antal kolumner

  3. Välja en kolumn som också är ett nyckelord i MySQL

  4. Autogenererar svarsfil