休眠 + C3p0 + mysql

Hibernate + C3p0 + mysql

我设置了一个使用休眠和 C3P0 进行连接的应用程序 pooling.Whenever 我尝试访问该应用程序 我收到 404 error.In 日志,我看到 mysql 已被阻止应用程序用户。尽管做了 flush hosts,我仍然遇到同样的异常。在 mysql 机器上执行 netstat 显示有许多入站连接试图连接处于等待状态。

     com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2    WARN resourcepool.BasicResourcePool:1841 - com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@64804446 -- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30). Last acquisition attempt exception: 
     java.sql.SQLException: null,  message from server: "Host '10.1.1.76' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'"
              at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)
              at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
              at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
              at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1104)
              at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2312)
              at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2122)
              at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:774)
              at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)
              at sun.reflect.GeneratedConstructorAccessor36.newInstance(Unknown Source)
              at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
              at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
              at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
              at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:375)
              at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:289)
              at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:135)
              at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
              at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
              at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPoolPooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
              at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
              at com.mchange.v2.resourcepool.BasicResourcePool.access0(BasicResourcePool.java:32)
              at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
              at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
    [03-02-16 06:10:46:910 CST] com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0    WARN resourcepool.BasicResourcePool:1841 - com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@6b7f48cf --                                                 Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30). Last acquisition attempt exception: 
    java.sql.SQLException: null,  message from server: "Host '10.1.1.76' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'"
              at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)
              at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
              at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
              at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1104)
              at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2312)
              at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2122)
              at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:774)
              at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)
              at sun.reflect.GeneratedConstructorAccessor36.newInstance(Unknown Source)
              at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
              at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
              at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
              at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:375)
              at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:289)
              at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:135)
              at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
              at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
              at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPoolPooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
              at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
              at com.mchange.v2.resourcepool.BasicResourcePool.access0(BasicResourcePool.java:32)
              at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
              at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
    [03-02-16 06:10:46:908 CST] com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1    WARN resourcepool.BasicResourcePool:1841 - com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@2bf45f28 -- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30). Last acquisition attempt exception: 
    java.sql.SQLException: null,  message from server: "Host '10.1.1.76' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'"
              at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)
              at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
              at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
              at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1104)
              at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2312)
              at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2122)
              at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:774)
              at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)
              at sun.reflect.GeneratedConstructorAccessor36.newInstance(Unknown Source)
              at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
              at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
              at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
              at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:375)
              at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:289)
              at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:135)
              at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
              at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
              at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPoolPooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
              at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
              at com.mchange.v2.resourcepool.BasicResourcePool.access0(BasicResourcePool.java:32)
              at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
              at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
    [03-02-16 06:10:46:919 CST] localhost-startStop-1   ERROR util.JDBCExceptionReporter:78 - Connections could not be acquired from the underlying database!
    [03-02-16 06:11:16:436 CST] com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1    WARN resourcepool.BasicResourcePool:1841 - com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@67c619c0 -- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30). Last acquisition attempt exception: 
    java.sql.SQLException: null,  message from server: "Host '10.1.1.76' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'"
              at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)
              at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
              at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
              at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1104)
              at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2312)
              at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2122)
              at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:774)
              at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)
              at sun.reflect.GeneratedConstructorAccessor36.newInstance(Unknown Source)
              at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
              at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
              at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
              at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:375)
              at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:289)
              at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:135)
              at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
              at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
              at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPoolPooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
              at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
              at com.mchange.v2.resourcepool.BasicResourcePool.access0(BasicResourcePool.java:32)
              at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
              at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
    [03-02-16 06:11:16:438 CST] com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#2    WARN resourcepool.BasicResourcePool:1841 - com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@740adfca -- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30). Last acquisition attempt exception: 
    java.sql.SQLException: null,  message from server: "Host '10.1.1.76' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'"
              at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)
              at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
              at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
              at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1104)
              at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2312)
              at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2122)
              at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:774)
              at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)
              at sun.reflect.GeneratedConstructorAccessor36.newInstance(Unknown Source)
              at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
              at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
              at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
              at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:375)
              at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:289)
              at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:135)
              at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
              at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
              at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPoolPooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
              at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
              at com.mchange.v2.resourcepool.BasicResourcePool.access0(BasicResourcePool.java:32)
              at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
              at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)

然后我尝试刷新主机。用于登录数据库的凭据是正确的。但是,每当访问该应用程序时,我仍然会看到相同的异常。

您可以在服务器启动时通过设置 max_connect_errors 来调整值:

   mysqld_safe --max_connect_errors=10000 &

或者:

  SET GLOBAL max_connect_errors=10000;

我解决了这个问题。问题是 xml 文件中定义的所有属性都没有在属性文件中定义。