问题背景
在本机开发,将大图片可以通过程序村放入数据库。然后在服务器端测试,却报以下错误。
<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)
解决步骤
-
已经检查models函数的相关字段
base64Str = db.Column(db.LargeBinary(65536)) -
检查数据库相关字段格式
desc table_name;
Field Type
base64Str mediumblob -
网络搜索 pymysql.err.OperationalError
解释:对于与数据库操作相关但不一定在程序员控制下的错误,如发生意外的断开连接、没有找到数据源名称、无法处理事务、在处理过程中发生内存分配错误等,会引发异常。 -
进一步搜索 "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