使用 mysql 写入 table 时如何处理 Broken piper 错误?

How to handle Broken piper error when writing to a table using mysql?

我要插入 table 的数据大约有 95k 行。所以本质上我是在尝试使用 executemany(sql, data) 函数插入 95k 个值。

我最初的怀疑是插入的值集的数量太多以至于 executemany() 函数无法处理。如果这确实是原因,或者是否有其他任何可能导致以下错误消息的想法,您有什么想法吗?

Traceback (most recent call last): File "/Users/ssrikanthan/anaconda/envs/ilc-load/lib/python3.5/site-packages/mysql/connector/network.py", line 130, in send_plain self.sock.sendall(packet) BrokenPipeError: [Errno 32] Broken pipe

尝试增加 max_allowed_packet 变量:

set global max_allowed_packet=262144000;

我们可以从 MySQL Config 更新同样的配置:

[mysqld]
max_allowed_packet=250M

更新配置后需要重启MySQL服务才能生效,这是更新变量的最佳方式。从查询中设置变量并不好,因为当 MySQL 服务重新启动时值更新为默认值。

此变量的默认值为 1MB,这在某些情况下是不够的,例如您的情况,其中包括大量数据插入。因此,在执行插入、更新和从 MySQL 转储数据等大数据操作时,应更新此变量。此变量的最大限制 1GB 但通常在所有情况下将其设置为 250 MB 就足够了。