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文件