问题
com.mysql.cj.jdbc.exceptions. PacketTooBigException: Packet for query is too large (3,456,888 > 1,048,576). You can change this value on the server by setting the’ max_allowed_packet ’
思路
项目场景:
同步大数据出现批量更新或批量插入失败
问题描述:
Caused by:
com.mysql.cj.jdbc.exceptions. PacketTooBigException: Packet for query is too large (3,456,888 > 1,048,576). You can change this value on the server by setting the’ max_allowed_packet ’
原因分析:
MySQL事务单次处理的数据包大小是有限的,不能超过设定的数据包的最大值,超过了MySQL驱动会掉丢数据,导致SQL操作失败。
解决方案:
1、调大参数max_allowed_packet
命令行方式(重启服务失效)
进入本地命令cmd net start mysql mysql -u root -p 输入密码回车登入MySQL服务器 show variables like 'max_allowed_packet'; //查看max_allowed_packet大小 set global max_allowed_packet=10*1024*1024; //设置允许的最大数据包大小,单位为B exit; //退出MySQL服务器
配置文件方式(不会失效,推荐)
[mysqld] #设置3306端口号 port=3306 #设置MySQL的安装目录 basedir=D:\\mysql-8.0.21-winx64 #设置MySQL数据库的数据存放目录 datadir=D:\\mysql-8.0.21-winx64\\data #允许的最大的数据包大小 max_allowed_packet=10*1024*1024 #运行最大连接数 max_connections=200 #运行连接失败的次数。这也是为了防止有人从该主机试图攻击数据库系统 max_connect_errors=10 #服务端使用的字符集默认为utf-8 character-set-server=utf8 [mysql] #客户端使用的字符集默认为utf8 default-character-set=utf8 [client] #客户端默认端口号为3306 port=3306 #日志 log=mylog.log
解决
成功加载sql文件