使用 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
就足够了。
我要插入 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
就足够了。