2015-05-06 97 views
0

正如我的话题所述,max_allowed_pa​​cket变量不起作用。 我有一个在eclipse中加载csv-files并通过servlet将它们存储到mysql数据库中的项目。对于小于1M的文件,它工作正常。 但是我的文件大小是95Mb,并且我在[mysqld]部分的my.ini文件中增加了高达500M的'max_allow_packet'变量。 但它没有工作。 Eclipse给我同样的错误。 请看看这两张图片:MySQL服务器配置问题

ECLIPSE

enter image description here

的my.ini

的[mysqld] ....

enter image description here

感谢帮助

*****编辑*****

com.mysql.jdbc.PacketTooBigException: Packet for query is too large (190104490 > 26214400). You can change this value on the server by setting the max_allowed_packet' variable. 
at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3540) 
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2417) 
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2582) 
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2535) 
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1911) 
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2145) 
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2081) 
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2066) 
at upload.Upload.doPost(Upload.java:71) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
at java.lang.Thread.run(Thread.java:745) 

这是主要的代码,其中该文件的上传,然后在MySQL存储:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

    response.setContentType("text/html;charset=UTF-8"); 

    Part part = request.getPart("file"); 

    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    InputStream in = part.getInputStream(); 
    CSV csv = new CSV(); 


    String name = null; 
    String header = part.getHeader("content-disposition"); 
    if(header.contains("filename")) 
    { 
     name = header.substring(header.lastIndexOf("=") + 1, header.length()).replace("\"", ""); 
    } 


    int i = 0; 
    while((i = in.read()) != -1) 
    { 
     baos.write(i); 
    } 
    csv.setCsvFile(baos.toByteArray()); 
    csv.setName(name); 
    baos.flush(); 

    try { 
     try { 
      Class.forName("com.mysql.jdbc.Driver").newInstance(); 
     } catch (InstantiationException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IllegalAccessException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } catch (ClassNotFoundException e1) { 
     e1.printStackTrace(); 
    } 
    try {   
     Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/loadcsvup","*****","*******");   
     PreparedStatement stmt = con.prepareStatement("INSERT INTO loadcsvup.csvfiles (csv_name,file) VALUES (?,?)"); 
     stmt.setString(1, csv.getName()); 
     stmt.setBytes(2, csv.getCsvFile());   
     stmt.executeUpdate(); 

     stmt.close(); 
     con.close(); 

    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 


} 

**** *编辑2 *****

好吧,现在我已经在my.ini文件的de [client]部分中设置了varibale。似乎是工作。 但现在我得到这个错误代码:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: The size of BLOB/TEXT data inserted in one transaction is greater than 10% of redo log size. Increase the redo log size using innodb_log_file_size. 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:422) 
at com.mysql.jdbc.Util.handleNewInstance(Util.java:389) 
at com.mysql.jdbc.Util.getInstance(Util.java:372) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:980) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3835) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3771) 
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2435) 
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2582) 
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2535) 
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1911) 
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2145) 
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2081) 
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2066) 
at upload.Upload.doPost(Upload.java:71) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
at java.lang.Thread.run(Thread.java:745) 

我已经设置了varibable这样的:

[mysqld] 
innodb_file_per_table=1 
innodb_buffer_pool_size=1GB 
innodb_log_file_size=128M 
innodb_log_buffer_size=8M 
+0

请添加错误文本,而不是图片,以使其可以通过搜索引擎找到。 – Filburt

回答

0

检查点

  • 你有没有改变后重新启动mysql服务我的.ini?
  • 运行查询SHOW GLOBAL VARIABLES LIKE 'max_allowed_packet'并查看该值。它应该是500MB(等于字节)
  • 如果上述查询不返回500M,则尝试运行SET GLOBAL max_allowed_packet = 500 * 1024 * 1024。然后重复步骤2.
  • 如果值显示为500 M,请重复上传文件。

如果仍然存在问题,那么它可能就像mysql正在查看不同的变量。

+0

与您的答案我得到了问题的工作。我有重新安装整个MySQL数据库,然后它的工作。谢谢 – user3625342