【问题标题】:jdbc MySQLTransientConnectionException exception with a particular query in productionjdbc MySQLTransientConnectionException 异常与生产中的特定查询
【发布时间】:2011-07-13 14:31:29
【问题描述】:

我有一个 Spring+hibernate+mysql+jstl 架构,运行在 linux CENTOS 生产环境中。

我添加了一个石英(调度器)模块,我的朋友石英每 10 秒检查一次文件夹中的新文件,如果找到,则将文件加载并加载到数据库中并移动文件。这些程序可以在我的 MacBook 中找到,但是在生产中我在尝试将数据加载到数据库时遇到 jdbc 错误,但与数据库相关的所有其他内容都可以正常工作。

我使用 JAVA 将文件加载到数据库中,例如:

String queryString = "LOAD DATA INFILE  '"+path+"' INTO TABLE  `branch_to_product` FIELDS TERMINATED BY  ';' ENCLOSED BY  '\"' ESCAPED BY  '\\\\' LINES TERMINATED BY  '\\n'(\n" +
            "`product_model` ,  `branch_to_product_monthly_rotation` ,  `branch_to_product_quantity`\n" +
            ")";

    Query query = getSession().createSQLQuery(queryString);

如果我从 phpmyadmin 运行 sql,它也会运行 find。

这些是我在日志中看到的错误:

[Loaded com.mysql.jdbc.SQLError from file:/usr/local/jakarta/apache-tomcat-5.5.33/common/lib/mysql-connector-java-5.1.13-bin.jar]  
[Loaded com.mysql.jdbc.NotImplemented from file:/usr/local/jakarta/apache-tomcat-5.5.33/common/lib/mysql-connector-java-5.1.13-bin.jar]  
[Loaded com.mysql.jdbc.exceptions.MySQLTransientConnectionException from file:/usr/local/jakarta/apache-tomcat-5.5.33/common/lib/mysql-connector-java-5.1.13-bin.jar]  
[Loaded com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException from file:/usr/local/jakarta/apache-tomcat-5.5.33/common/lib/mysql-connector-java-5.1.13-bin.jar]  
[Loaded com.mysql.jdbc.exceptions.MySQLDataException from file:/usr/local/jakarta/apache-tomcat-5.5.33/common/lib/mysql-connector-java-5.1.13-bin.jar]  
[Loaded com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException from file:/usr/local/jakarta/apache-tomcat-5.5.33/common/lib/mysql-connector-java-5.1.13-bin.jar]  
[Loaded com.mysql.jdbc.exceptions.MySQLSyntaxErrorException from file:/usr/local/jakarta/apache-tomcat-5.5.33/common/lib/mysql-connector-java-5.1.13-bin.jar]  
[Loaded com.mysql.jdbc.exceptions.DeadlockTimeoutRollbackMarker from file:/usr/local/jakarta/apache-tomcat-5.5.33/common/lib/mysql-connector-java-5.1.13-bin.jar]  
[Loaded com.mysql.jdbc.exceptions.MySQLTransactionRollbackException from file:/usr/local/jakarta/apache-tomcat-5.5.33/common/lib/mysql-connector-java-5.1.13-bin.jar]  
[Loaded java.sql.SQLRecoverableException from /usr/local/jdk1.6.0_22/jre/lib/rt.jar]
[Loaded com.mysql.jdbc.exceptions.jdbc4.CommunicationsException from file:/usr/local/jakarta/apache-tomcat-5.5.33/common/lib/mysql-connector-java-5.1.13-bin.jar]  
[Loaded org.apache.tomcat.dbcp.pool.PoolUtils from file:/usr/local/jakarta/apache-tomcat-5.5.33/common/lib/naming-factory-dbcp.jar]  
[Loaded org.apache.tomcat.dbcp.pool.KeyedObjectPool from file:/usr/local/jakarta/apache-tomcat-5.5.33/common/lib/naming-factory-dbcp.jar]  
[Loaded org.apache.tomcat.dbcp.pool.PoolUtils$KeyedObjectPoolMinIdleTimerTask from file:/usr/local/jakarta/apache-tomcat-5.5.33/common/lib/naming-factory-dbcp.jar]  
[Loaded org.apache.tomcat.dbcp.pool.PoolUtils$ObjectPoolMinIdleTimerTask from file:/usr/local/jakarta/apache-tomcat-5.5.33/common/lib/naming-factory-dbcp.jar]  
[Loaded sun.net.ConnectionResetException from /usr/local/jdk1.6.0_22/jre/lib/rt.jar]  
[Loaded org.hibernate.action.BulkOperationCleanupAction from file:/usr/local/jakarta/apache-tomcat-5.5.33/shared/lib/hibernate.jar]  
0
[Loaded org.hibernate.exception.JDBCExceptionHelper from file:/usr/local/jakarta/apache-tomcat-5.5.33/shared/lib/hibernate.jar]  
09:19:25,633 ERROR JDBCExceptionReporter:72 - Access denied for user 'jardinde_fp'@'localhost' (using password: YES)  
09:19:25,633 ERROR JDBCExceptionReporter:72 - Access denied for user 'jardinde_fp'@'localhost' (using password: YES)  

【问题讨论】:

    标签: java mysql hibernate spring


    【解决方案1】:

    您有一个简单的身份验证错误:

    错误 JDBCExceptionReporter:72 - 用户 'jardinde_fp'@'localhost' 的访问被拒绝(使用密码:YES)

    确保服务器允许应用程序的凭据。

    您发布的日志中的这些行仅显示 JVM 从它们的 JAR 加载这些类文件,它们不是错误或真正的问题(JVM 在它第一次找到/执行引用它们的代码时加载类,并且它必须走完整的参考图):

    [从文件加载 com.mysql.jdbc.SQLError:/usr/local/jakarta/apache-tomcat-5.5.33/common/lib/mysql-connector-java-5.1.13-bin.jar]
    [从文件加载com.mysql.jdbc.NotImplemented:/usr/local/jakarta/apache-tomcat-5.5.33/common/lib/mysql-connector-java-5.1.13-bin.jar]
    [从文件加载com.mysql.jdbc.exceptions.MySQLTransientConnectionException:/usr/local/jakarta/apache-tomcat-5.5.33/common/lib/mysql-connector-java-5.1.13-bin.jar]

    【讨论】:

    • 我理解您的逻辑很有意义,但是,使用凭据您的意思是数据库登录名和密码对吗?但是它们与程序的其他部分一起工作得很好,我检查了它们并且它们没问题,或者是否有其他元素可以使我应该检查凭据?
    • IIRC mysql 区分允许jardinde_fp 从某些 IP 登录和允许同一用户从“localhost”登录 - 确保两者都已添加。仔细检查密码是否正确等。更多建议查阅MySQL文档。
    【解决方案2】:

    在查询中添加了 LOCAL 一词并起作用了!

    String queryString = "LOAD DATA LOCAL INFILE  '"+path+"' INTO TABLE  `branch_to_product` FIELDS TERMINATED BY  ';' ENCLOSED BY  '\"' ESCAPED BY  '\\\\' LINES TERMINATED BY  '\\n'(\n" +
                "`product_model` ,  `branch_to_product_monthly_rotation` ,  `branch_to_product_quantity`\n" +
                ")";
    
        Query query = getSession().createSQLQuery(queryString);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-01
      • 2014-01-08
      • 1970-01-01
      相关资源
      最近更新 更多