2024-01-13 17:36:49.0|分类: mysql|浏览量: 2570
错误现象:Packet for query is too large(1767212 > 1048576),You can change this value on the server by setting the 'max_allow_packet' variable. 修改此变量的值: 第一种方法:MySQL安装目录下的my.ini文件中的[mysqld]段中的"max_allowed_packet = 1M",(可能有些文件会没有这一行的) 格式为: [mysqld] max_allowed_packet = 10M ( 将1M更改为4M(如果没有这行内容,增加一行)), 保存, 重起MySQL服务。 第二种方法: mysql命令行中执行: set global max_allowed_packet = 1024*1024*10 设置完毕之后推出客户端端,重新登录,可以观察到生效。 相关知识: 数据包 每个数据包,都由包头、包体两部分组成,包头由3字节的包体长度、1字节的包编号组成。 3字节最多能够表示2 ^ 24 = 16777216字节(16M),就是说,一个数据包的包体长度必须小于等于16M,(比16MB少1个字节)。 当要发送大于16M的数据怎么办? 当要发送大于16M的数据时,会将数据拆分成多个16M的数据包,除最后一个数据包之外,其他数据包大小都是16M。 而MySQL Server收到这样的包后,如果发现包体长度等于16M ,他就知道本次接收的数据由多个数据包组成, 会先将当前数据包的内容写入缓冲区,然后接着读取下一个数据包,并将下一个数据包的内容追加到缓冲区, 直到读到结束数据包,就接收到客户端发送的完整数据了。 怎样算一个数据? 一个SQL是一个数据包返回查询结果时,一行数据算一个数据包。 解析的binlog ,如果用MySQL客户端导入,一个SQL算一个数据包。 在复制中,一个event算一个数据包。 参考文档:https://mp.weixin.qq.com/s?__biz=MzI2NzM1OTM4OA==&mid=2247496679&idx=1&sn=bc9391542d1b42c64e1d49632c4cf969&chksm=ea82b614ddf53f0225e2f7249f907f46552283bdb1970d5b340fc94ed9a72638044444542811&scene=27 |