我的应用程序下载邮件通过IMAP并将它们存储在MySQL数据库中。早些时候我支持的邮件大小高达10 MB,因此用于存储邮件内容的“中等文本”列就足够了。现在我需要支持高达30MB的邮件。所以我将列的数据类型更改为'largetext'。昨天存储了一个大小为25 MB的邮件。之后,每当我执行mysqldump命令时,它都会抛出错误:
mysqldump: Error 2020: Got packet bigger than 'max_allowed_packet' bytes when dumping table `ib_mailbox_backup` at row: 3369
第3369行包含25 MB邮件。
在MySQL配置中,我将'max_allowed_packet'从64M增加到512M,但它仍然以相同的错误失败。在运行MySQL服务器的同一台机器上执行mysqldump命令。我该如何解决这个问题?
答案 0 :(得分:104)
--max_allowed_packet=512M
添加到mysqldump
命令。max_allowed_packet=512M
添加到[mysqldump]
的{{1}}部分(感谢@Varun)注意:如果它不在my.cnf
部分...
答案 1 :(得分:2)
我的一些脚本在升级到Debian 9& MariaDB的。
Debian上的MariaDB引入了一个专门用于mysqldump设置的新配置文件(/etc/mysql/conf.d/mysqldump.cnf
)。如果您设置了max_allowed_packet
<>在您之前的标准16M
中/etc/mysql/my.cnf
,新的配置文件将覆盖该设置。因此,请务必检查此新配置文件,并删除该条目或根据您的需要进行调整。
我不确定是否通过从MySQL到MariaDB的交换引入了更改,或者Debian是否更改了配置文件在V9中的布局方式。
答案 2 :(得分:0)
我遇到了类似的错误,第0行的数据包大小为512M会失败。这是一个明显受损的innodb表(mysqlcheck显示OK)。我最终重新创建了表,然后它只用了128M的小包就可以正常工作。