mysql Got a packet bigger than 'max_allowed_packet' bytes

背景

数据库备份执行SQL文件时,执行到图片表插入图片数据时错误:

190820-mysql-exe-sql-bigger-bytes.png

错误提示:Got a packet bigger than 'max_allowed_packet' bytes

原因分析及解决

max_allowed_packet是什么意思?

max_allowed_packet针对的是一个事务中的一行记录大小,当一行记录超过了限制的大小,将会报错。

sql文件中每次insert完进同一张表的所有数据被称为一个数据包(packet),max_allowed_packet就是来限制这个的大小的阈值,大于这个值,mysql的I/O连接会关闭,就会报这个错。

查询执行插入的表(filearchive)的大小:

mysql> select 
table_schema as '数据库',
table_name as '表名',
table_rows as '记录数',
truncate(data_length/1024/1024, 2) as '数据容量(MB)',
truncate(index_length/1024/1024, 2) as '索引容量(MB)'
from information_schema.tables
where table_schema='zxbdb'
order by data_length desc, index_length desc;
+--------+-----------------------------------+--------+--------------+--------------+
| 数据库 | 表名                              | 记录数 | 数据容量(MB) | 索引容量(MB) |
+--------+-----------------------------------+--------+--------------+--------------+
| zxbdb  | filearchive                       |    136 | 14.50        | 0.00         |

可以看到结果是14.5MB,那mysql默认max_allowed_packet的值是多少?

mysql> show VARIABLES like '%max_allowed_packet%';
+---------------------------+------------+
| Variable_name             | Value      |
+---------------------------+------------+
| max_allowed_packet        | 4194304    |
| mysqlx_max_allowed_packet | 67108864   |
| slave_max_allowed_packet  | 1073741824 |
+---------------------------+------------+
3 rows in set, 1 warning (0.00 sec)

可以看到是4MB,明显是超出了。

怎么修改?有两种方式:

  • 临时修改(mysql 重启后自动恢复默认值):输入命令 set global max_allowed_packet = 30*1024*1024;
  • 永久修改:修改my.ini文件的max_allowed_packet配置;

参考

转载于:https://www.cnblogs.com/ricolee/p/max_allowed_packet.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值