mysql数据库无法连续插入大量数据集的原因是啥?
Posted
技术标签:
【中文标题】mysql数据库无法连续插入大量数据集的原因是啥?【英文标题】:What is reason for mysql database couldn't insert huge data set continuously?mysql数据库无法连续插入大量数据集的原因是什么? 【发布时间】:2015-01-27 03:57:16 【问题描述】:我正在尝试逐段阅读给定的网页链接、网页并将该数据插入数据库。
每次阅读并插入大约 20 个网页后,都会出现以下错误消息。
我在Xampp
mysql 服务器上工作。清除历史记录后,cookies 会再次正常工作。然后在阅读网页并插入相同的错误之后。
没有合适的解决方案吗?一些堆栈溢出问题提到了编辑一些配置文件的一些想法。
因为我在 Windows 环境中工作,我不清楚他们在提到什么。他们提到增加最大连接。但不清楚他们提到的我如何编辑某些文件(不清楚该配置文件在 Windows 环境中的存储位置)。
错误信息:
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at sun.reflect.GeneratedConstructorAccessor8.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:343)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2137)
... 12 more
Caused by: java.net.SocketException: No buffer space available (maximum connections reached?): connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:253)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:292)
... 13 more
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at sun.reflect.GeneratedConstructorAccessor8.newInstance(Unknown Source)
【问题讨论】:
请检查您的代码以确保您在 JDBC 连接(和您的结果集)上正确调用close()
。这对我来说就像你的 MySQL 服务器被包含连接泄漏的应用程序(你的 Java 东西)击中。
@OllieJones 插入数据库后,我将在 finally 块中关闭连接。它也想关闭一些连接阅读类吗?根据下面的“Vishvesh Phadnis 答案”,我的问题解决了一些问题。但几分钟后,同样的事情又发生了。怎么了?
【参考方案1】:
在Mysql中my.ini
或者可能是my-default.ini
文件集max_allowed_packet=32M
之后重启mysql服务。
您可以根据需要指定尺寸。
或
用mysql命令shell
shell > mysql --max_allowed_packet=32M
【讨论】:
问题解决了一些扩展。现在大约五分钟阅读和插入。然后又发生了同样的事情。我该如何解决? 如果您有那么多可用内存,请将 max_allowed_packet 的大小增加到 500M 或 1024M。请参考:dev.mysql.com/doc/refman/5.5/en/packet-too-large.html 提前感谢。我只是逐段阅读并逐行插入。每次一个句子怎么变得太大了?大多数人都说内存泄漏。但是我每次在finally块插入数据后都会关闭连接。你怎么看? @Maduri 老实说我没有那么多经验,但不会每行打开连接对象。最好使用连接池 我会建议在 *** 上搜索或提出使用 java 插入大数据和数据插入统计数据的问题以上是关于mysql数据库无法连续插入大量数据集的原因是啥?的主要内容,如果未能解决你的问题,请参考以下文章