【问题标题】:mysqldump error: Got packet bigger than max_allowed_packet'mysqldump 错误:得到的数据包大于 max_allowed_pa​​cket'
【发布时间】:2012-02-07 13:59:37
【问题描述】:

我的应用程序通过 IMAP 下载邮件并将它们存储在 MySQL 数据库中。早些时候,我支持最大 10 MB 的邮件大小,因此存储邮件内容的“mediumtext”列就足够了。现在我需要支持最大 30MB 的邮件。所以我将列的数据类型更改为“大文本”。昨天存储了一封大小为 25 MB 的邮件。之后,每当我执行 mysqldump 命令时,它都会抛出错误:

mysqldump:错误 2020:在第 3369 行转储表“ib_mailbox_backup”时,数据包大于“max_allowed_pa​​cket”字节

第 3369 行包含 25 MB 邮件。

在 MySQL 配置中,我将“max_allowed_pa​​cket”从 64M 增加到 512M,但仍然失败并出现相同的错误。在运行 MySQL 服务器的同一台机器上执行 mysqldump 命令。我该如何解决这个问题?

【问题讨论】:

  • "第 3369 行包含 25 MB 的邮件。"你是怎么知道第 3369 行的大小的?

标签: mysql mysqldump


【解决方案1】:
  1. 您可以将--max_allowed_packet=512M 添加到您的mysqldump 命令中。
  2. 或将max_allowed_packet=512M 添加到my.cnf[mysqldump] 部分(感谢@Varun)

注意:如果不在[mysqldump]部分下,它将不起作用...

【讨论】:

  • 成功了。有没有办法把它放在 MySQL 配置文件中?
  • 这是 mysqldump 选项,它不起作用,但如果你在 Unix 系列操作系统下,你可以创建别名。
  • 创建了一个部分 [mysqldump] 并将 max_allowed_pa​​cket=200M 添加到我的 conf 文件中,它可以工作。
  • 很高兴知道!感谢分享!
  • 我不得不使用--max-allowed-packet=... 作为命令行参数。如果您的版本不知道--max_allowed_packet,请查看mysqldump --help
【解决方案2】:

升级到 Debian 9 和 MariaDB 后,我的一些脚本停止工作。

Debian 上的 MariaDB 引入了一个专门用于 mysqldump 设置的新配置文件 (/etc/mysql/conf.d/mysqldump.cnf)。如果您之前在标准/etc/mysql/my.cnf 中设置了max_allowed_packet 16M,新的配置文件将覆盖该设置。所以一定要检查这个新的配置文件,要么删除条目,要么根据你的需要进行调整。

我不确定更改是由从 MySQL 到 MariaDB 的交换引入的,还是 Debian 对 V9 中配置文件的布局方式进行了更改。

【讨论】:

    【解决方案3】:

    我遇到了类似的错误,第 0 行的数据包大小为 512M 会失败。这是一个明显损坏的 innodb 表(mysqlcheck 显示正常)。我最终重新创建了表,然后它在只有 128M 的小数据包大小下运行良好。

    【讨论】:

    • 你能解释一下具体问题是什么——是配置问题吗?
    猜你喜欢
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 2012-10-24
    • 2010-09-10
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多