【解决】图片传到数据库时,报错 MySQLserver has gone away BrokenPipeError

问题背景

在本机开发,将大图片可以通过程序村放入数据库。然后在服务器端测试,却报以下错误。
<class 'bytes'> 514412 # 图片数据大小
<class 'str'> 514412 # 图片数据大小
(pymysql.err.OperationalError)(2006, "MySQLserver has gone away (BrokenPipeError(32, 'Broken pipe'))"
(Background on this error at http://sqlalche.me/e/e3q8)

解决步骤

  1. 已经检查models函数的相关字段
    base64Str = db.Column(db.LargeBinary(65536))

  2. 检查数据库相关字段格式
    desc table_name;
    Field Type
    base64Str mediumblob

  3. 网络搜索 pymysql.err.OperationalError
    解释:对于与数据库操作相关但不一定在程序员控制下的错误,如发生意外的断开连接、没有找到数据源名称、无法处理事务、在处理过程中发生内存分配错误等,会引发异常。

  4. 进一步搜索 "MySQLserver has gone away (BrokenPipeError(32, 'Broken pipe'))"

解决办法:调整max_allowed_packet 参数

MariaDB [(none)]> show variables like '%max_allowed%';
+--------------------------+------------+
| Variable_name | Value |
+--------------------------+------------+
| max_allowed_packet | 16777216 |
| slave_max_allowed_packet | 1073741824 |
+--------------------------+------------+
2 rows in set (0.00 sec)
16777216 = 16 × 1024 × 1024

MariaDB [none]> show variables like '%max%_allowed%';
+--------------------------+------------+
| Variable_name | Value |
+--------------------------+------------+
| max_allowed_packet | 1048576 |
| slave_max_allowed_packet | 1073741824 |
+--------------------------+------------+
2 rows in set (0.00 sec)
1048576 = 1024 ×1024

set global max_allowed_packet = 2 × 1024 × 1024 × 10

posted @ 2020-03-05 15:32  Daemonnnn  阅读(881)  评论(0编辑  收藏  举报