2006 mysql server has gone away
场景
php yii 框架,一个 console 任务,执行的时候,报 2006 mysql server has gone away 错误.
方案
导致报错的原因是,这个 console 任务处理的数据太多,大量的错误测试数据发送到 mysql,超出了包大小的限制.
...
$task->status = TaskModel::STATUS_FAIL;
$task->message = json_encode($object->errors);
$task->save();
return self::DELETE;
...
上面的 $task->message = json_encode($object->errors); 文本内容过大,导致 save() 之后,超出了 mysql 限制的大小,
从而导致 2006 mysql server has gone away.
查看 mysql max_allowed_packet 的大小:
azoya_product_system> show variables like '%max_allowed_packet%';
+--------------------------+------------+
| Variable_name | Value |
+--------------------------+------------+
| max_allowed_packet | 16777216 |
| slave_max_allowed_packet | 1073741824 |
+--------------------------+------------+
修改 max_allowed_packet 的大小
azoya_product_system> set global max_allowed_packet = 1073741824;
修改之后,退出 mysql,重新登录即可.
或者,限制 $object->erros 的大小
if (count($object->erros) > 50) {
$object->erros = array_slice($object->erros, 0, 50);
}
2006 mysql server has gone away
场景
php
yii框架,一个console任务,执行的时候,报2006 mysql server has gone away错误.方案
导致报错的原因是,这个
console任务处理的数据太多,大量的错误测试数据发送到mysql,超出了包大小的限制.上面的
$task->message = json_encode($object->errors);文本内容过大,导致save()之后,超出了mysql限制的大小,从而导致
2006 mysql server has gone away.查看
mysqlmax_allowed_packet的大小:修改
max_allowed_packet的大小修改之后,退出
mysql,重新登录即可.或者,限制
$object->erros的大小