一:问题背景介绍.
1. MySQL插入1000W条数据的时候因数据量大于单表默认数据量而报错.(MySQL 5.7)
com.mysql.jdbc.PacketTooBigException: Packet for query is too large (4232009 > 4194304). You can change this value on the server by setting the max_allowed_packet’ variable.
描述:说明单表的默认存储空间存不下了,导致数据写入单表失败了,需要修改默认的存储空间大小为更大的.
2. MySQL的单表默认存储大小.
MYSQL默认的存储空间大小是:4194304/1024/1024=4M.
(方式一:基于MySQL命令行的修改方式)
3. Navicat下查看单表的默认大小.
show VARIABLES like 'max_allowed_packet';
4. 修改默认的单表存储大小.(这里以修改为10M为例进行测试).
set global max_allowed_packet=10*1024*1024;

现在查询一下大小.(发现没有生效).

关闭这个窗口重新登录一下Navicat的命令行界面.(关键)10485760/1024/1024=10M

但是现在查看MySQL的配置文件发现max_allowed_packet还是默认的4M,因为是临时生效,并未修改配置文件.
(方式二:基于配置文件的修改方式)
还可以通过配置文件的方式来修改:MySQL服务的路径下修改

如果修改会提示拒绝访问的.(出于MySQL服务器安全性考虑).
赋予修改权限即可.
点击应用->确定.
然后修改my.ini文件.配置文件向下找到max_allowed_packet配置项.

因为修改了配置文件,所以要重新启动一下MySQL服务,使配置生效(打开任务管理器,点击下面的菜单条最右边的服务).

重新启动完毕后,可以在客户端测试一下了,发现现在是15M了.(15728640/1024/1024=15M)

本文详细解析了在MySQL5.7中插入1000万条数据时遇到的PacketTooBigException错误,并提供了两种解决方案:一是通过命令行临时调整max_allowed_packet参数;二是修改配置文件实现永久生效。
476

被折叠的 条评论
为什么被折叠?



