[英]Migrating from MySql: MariaDB server closing client connections unexpectedly
由於許可/商業使用原因,我們正在從MySql遷移到MariaDB。
我們已經成功地用MariaDB客戶端jar替換了MySql連接器jar(第一次更改),現在嘗試用MariaDB服務器替換MySql服務器而不更改數據文件。
我們所有的應用程序運行完美約8-12小時,之后我們看到以下異常:
org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Cannot open connection
Caused by:
org.hibernate.exception.JDBCConnectionException: Cannot open connection
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:74)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:29)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:426)
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144)
at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:119)
at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:57)
at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1326)
at org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:494)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:315)
at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:257)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:102)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:209)
at $Proxy4.getMessageCountByStatus(Unknown Source)
at com.onmobile.cmfweb.monitoring.CmfMessagesMonitor.getMessageCounts(CmfMessagesMonitor.java:56)
at sun.reflect.GeneratedMethodAccessor625.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:270)
at com.onmobile.cmfshare.MethodInvockingBean.invoke(MethodInvockingBean.java:28)
at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:212)
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:79)
at org.quartz.core.JobRunShell.run(JobRunShell.java:203)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)
Caused by: java.sql.SQLNonTransientConnectionException: Could not connect to localhost:3306: unexpected end of stream, read 0bytes from 4
at org.mariadb.jdbc.internal.SQLExceptionMapper.get(SQLExceptionMapper.java:136)
at org.mariadb.jdbc.internal.SQLExceptionMapper.throwException(SQLExceptionMapper.java:106)
at org.mariadb.jdbc.Driver.connect(Driver.java:114)
at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:37)
at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:290)
at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:840)
at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:95)
at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:544)
at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:81)
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:423)
... 21 more
Caused by: org.mariadb.jdbc.internal.common.QueryException: Could not connect to localhost:3306: unexpected end of stream, read 0bytes from 4
at org.mariadb.jdbc.internal.mysql.MySQLProtocol.connect(MySQLProtocol.java:509)
at org.mariadb.jdbc.internal.mysql.MySQLProtocol.connect(MySQLProtocol.java:669)
at org.mariadb.jdbc.internal.mysql.MySQLProtocol.<init>(MySQLProtocol.java:264)
at org.mariadb.jdbc.Driver.connect(Driver.java:110)
... 28 more
Caused by: java.io.EOFException: unexpected end of stream, read 0bytes from 4
at org.mariadb.jdbc.internal.common.packet.buffer.ReadUtil.readFully(ReadUtil.java:84)
at org.mariadb.jdbc.internal.common.packet.buffer.ReadUtil.readFully(ReadUtil.java:92)
at org.mariadb.jdbc.internal.common.packet.RawPacket.nextPacket(RawPacket.java:77)
at org.mariadb.jdbc.internal.common.packet.SyncPacketFetcher.getRawPacket(SyncPacketFetcher.java:67)
at org.mariadb.jdbc.internal.mysql.MySQLProtocol.connect(MySQLProtocol.java:467)
... 31 more
如果再次使用MySql服務器,則異常消失。
從我調試到目前為止,MariaDB服務器由於某種原因正在關閉客戶端連接。 我最初懷疑是空閑連接但我們正在使用像'testOnBorrow'這樣的Hibernate配置,所以不應該這樣。
任何人都可以幫助我們找出原因並幫助我們解決問題嗎? 我應該在MariaDB中進行任何特定配置嗎?
我甚至通過增加MariaDB服務器中param'interactive_timeout'的值來運行我們的應用程序,但它沒有幫助。
順便說一句,我們正在使用Spring-Hibernate並使用Commons-pool jar匯集我們的連接。
任何形式的幫助將深表感謝。
由於參數不正確,我們最近遇到了同樣的問題。 此錯誤是由您的Web實例嘗試使用不再有效的連接引起的。
這可以通過確保以下參數正確來解決:
validationQuery="SELECT 1"
。 wait_timeout=180
validationInterval=60
,並結合wait_timeout=180
,它應該及時捕獲任何斷開的連接。 您可以嘗試增加'wait_timeout'而不是'interactive_timeout'。 8-12小時,直到錯誤與wait_timeout的默認值10小時相關。 JDBC驅動程序在連接時不設置交互式客戶端標志,因此更改為“interactive_timeout”可能無效。 我還回復了Maria KB的交叉帖子;)
我也有一個像這樣的錯誤Could not connect to localhost:3306: unexpected end of stream, read 0 bytes from 4
我的架構是Tomcat的webapp,它將數據插入MariaDB。
我使用的是連接器版本1.5.1RC ! 我切換到1.3.1連接器版本 ,現在運行正常!
我也遇到過這個問題。 問題隨着降低wait_timeout而消失。
SHOW SESSION VARIABLES LIKE 'wait_timeout'; ->> would be 8 hours. which is huge.
SET session wait_timeout=300; ->> this should fix the issue.
看着
SHOW VARIABLES LIKE 'max_connections';
SHOW GLOBAL STATUS LIKE '%connect%';
比較兩個系統之間的my.cnf值; 你可能會發現像上面這樣的東西有所不同。 如果問題仍然不明顯,請提供這些值以供進一步討論。
根據本文的調查結果,您可以選擇兩種方法:
您應該嘗試關閉innodb_file_per_table
要么...
增加打開文件限制,如果你在高規格機器上運行,這會告訴你機器$ ulimit -n
上的當前值
我認為問題出在MariaDB Connector / J上。 嘗試使用像MariaDB Connector / J 1.2.3這樣的穩定版本。 此外,當autoReconnect設置為true或標准故障轉移時,請研究使用基本故障轉移的故障轉移行為 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.