项目场景:
MySQL数据库批量插入数据产生的错误:
Packet for query is too large (1,335,421 > 1,048,576). You can change this value on the server by setting the ‘max_allowed_packet’ variable.
问题描述
这里是测试给MySQL数据库中批量插入大量数据,产生的问题,这里是,插入10万条数据,产生的异常!
原因分析:
出现问题的原因:批量插入数据量过大
MySQL
根据配置文件会限制Server接受的数据包大小。有时候插入、更新或查询时数据包的大小,会受max_allowed_packet
参数限制,导致操作失败。
解决方案:
- 查询当前数据库设置的大小
max_allowed_packet
大小
show VARIABLES like '%max_allowed_packet%';
- 说明:
1*1024*1024 = 1048576 =1M
-
解决办法
-
Windows 一般都是修改 my.ini 文件
[mysqld]
max_allowed_packet = 524288000
- Linux 操作系统 修改my.cnf 文件
vim /etc/my.cnf
[mysqld]
max_allowed_packet = 524288000
- 注意哦:最大值是
1G(1073741824)
,如果设置超过1G
,查看最终生效结果也只有1G
。
500*1024*1024 =524288000=500M
- 修改完成之后要重启
MySQL
然后检查max_allowed_packet
大小
总结:
max_allowed_packet参数介绍
max_allowed_packet
是指MySQL
服务器端和客户端在一次传送数据包的过程当中最大允许的数据包大小。如果超过了设置的最大长度,则会数据库保持数据失败。
注意:
- 通过命令行方式修改时,不能用M、G,只能这算成字节数设置。使用配置文件修改才允许设置M、G单位。
- 命令行修改之后,需要退出当前回话(关闭当前mysql server链接),然后重新登录才能查看修改后的值。通过命令行修改只能临时生效,如果下次数据库重启后对应的配置就会又复原了,因为重启的时候加载的是配置文件里面的配置项。
max_allowed_packet
最大值是1G(1073741824)
,如果设置超过1G
,查看最终生效结果也只有1G
。