【问题标题】:How to handle Broken piper error when writing to a table using mysql?使用mysql写入表时如何处理Broken piper错误?
【发布时间】:2016-05-12 08:33:26
【问题描述】:

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

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

Traceback(最近一次调用最后一次):文件 “/Users/ssrikanthan/anaconda/envs/ilc-load/lib/python3.5/site-packages/mysql/connector/network.py”, 第 130 行,在 send_plain self.sock.sendall(packet) BrokenPipeError: [Errno 32] Broken pipe

【问题讨论】:

    标签: python mysql python-3.x mysql-python


    【解决方案1】:

    尝试增加max_allowed_packet 变量:

    set global max_allowed_packet=262144000;
    

    我们也可以从 MySQL Config 更新相同的内容:

    [mysqld]
    max_allowed_packet=250M
    

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

    这个变量的默认值是1MB,这在像你这样包含大量数据插入的情况下是不够的。因此,在执行大数据操作(如从 MySQL 插入、更新和转储数据)时,应该更新此变量。此变量的最大限制 1GB 但通常将其设置为 250 MB 在所有情况下就足够了。

    【讨论】:

    • 返回mysql.connector.errors.ProgrammingError: 1227 (42000): Access denied; you need (at least one of) the SUPER privilege(s) for this operation
    • 是的,您需要拥有超级权限才能设置此变量。
    • @user4659009:如果您有权访问,您也可以从 MySQL 配置文件更新它,否则您的数据库用户应该有超级权限来更新它。检查更新的答案。
    • 我正在使用 mysql 工作台,我找不到要更新 max_allowed_pa​​cket 的位置,有什么想法可以找到吗?
    • 您在 Windows 操作系统上运行 MySQL?
    猜你喜欢
    • 2014-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多