项目中需要导入Excel文件,然后入库,突然最近这几天系统日志经常报错:### Error updating database.  Cause: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (49049746 > 4194304). You can change this value on the server by setting the max_allowed_packet' variable.,具体错误日志截图如下:

57021mysql 不支持utf8mb3吗 mysql不支持packages_百度

因是mysql的max_allowed_packet设置过小引起的,安装时默认设置的是1M

mysql根据配置文件会限制server接受的数据包大小。

 

记住执行下面的命令必须是在登陆的前提下

登陆mysql

57021mysql 不支持utf8mb3吗 mysql不支持packages_mysql_02

查看mysql设置的max_allowed_packet大小

show VARIABLES like '%max_allowed_packet%';

57021mysql 不支持utf8mb3吗 mysql不支持packages_重启_03

可以看到确实很小

解决方案

更改  max_allowed_packet  的方式有两种

1.直接命令行修改  

set global max_allowed_packet = 2*1024*1024*10;  这样 代表设置成20  大家看着改成自己需要的即可

这样修改好处是, 有些公司的数据库服务不能停这样修改不用重启服务  坏处是这是临时的方案,重启服务就数值就恢复了

 

大家修改完可以再次查看下

show VARIABLES like '%max_allowed_packet%';

有人发现没改变,别着急退出登陆重新登陆在查看下 记住 是 exit 不是重启mysql服务

从新登陆后就会发现改变了  一开始我没退出 发现数值没改变以为 这种方式没效果

2. 修改my.cnf

我们是以linux为基础的windows下会更简单,自行百度

很多人都找不到  linux 下的my.cnf文件 

由于最近在 linux 安装下 mysql  所以对这个文件比较了解 

正常我们下载好  mysql  压缩包 -zxvf 解压 后在 /etc/my.cnf 会存在这个文件  还可能存在另一个路径下 我给忘记了,大家需要的话可以百度下  我的就是在  /etc/my.cnf 下 安装好 mysql 后 很多人在启动  mysql 的时候 会报错 我当时也遇到啦这个问题 ,网上找了很多说的 把 /etc/my.cnf 删除就可以启动啦 我当时试了  确实删除可以启动  在这里告诉大家做没把握的事时记得备份 ,我当时就备份了,但是我想不明白,my.cnf 存在即合理 ,他肯定有用,那会我就想他是干嘛用的,为什么删除也能启动,后来我明白,那是mysql的参数配置文件,比如 编码啊 端口啊等等  里面可以设置 咱们今天的  max_allowed_packet  直接 max_allowed_packet=100M 你想要的数值,之后保存重启数据库就行.为什么删除也可以呢,我猜测没有的话 mysql 使用默认的,这是我的猜测 ,如果哪位大佬知道可以评论告诉大家.但是删除其实是在躲避,现在想想解决启动错误用这种方式很Low,mysql有错误日志的,我当时看了下日志明白为什么启动报错,因为设置参数时 是键值对的 我的 key 写错了,修改后 没删除 my.cnf 也能正常启动了,如果大家 没有my.cnf也不要紧,可以自己建一个 里面的 参数百度一搜一大波 ,挑你需要的保留不需要的删除即可

我的 my.cnf    max_allowed_packet发现配置是max_allowed_packet=1M,直接将1改为20即可

57021mysql 不支持utf8mb3吗 mysql不支持packages_mysql_04

修改之后重新启动mysql服务,查看 max_allowed_packet配置大小

57021mysql 不支持utf8mb3吗 mysql不支持packages_重启_05

ok,搞定

欢迎大家在评论区留言问问题,但有一个前提,我希望大家问之前,先自己百度一波,这样也能提高你解决问题的思路

我在很多博客下面看到很多问题很基础,如果连基础不能理解的话,就很难做上层bug的修改,比如咱们今天讲的,你要能找到my.cnf或者能登陆mysql 使用命令行修改,假如你不会登陆,这就很难受了