我的应用程序下载邮件通过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命令 . 我该如何解决这个问题?
3 回答
您可以将
--max_allowed_packet=512M
添加到mysqldump
命令中 .或将
max_allowed_packet=512M
添加到my.cnf
的[mysqldump]
部分(感谢@Varun)注意:如果它不在
[mysqldump]
部分下,它将无效...升级到Debian 9和MariaDB后,我的一些脚本停止工作 .
Debian上的MariaDB引入了一个专门用于mysqldump设置的新配置文件(
/etc/mysql/conf.d/mysqldump.cnf
) . 如果您之前在标准/etc/mysql/my.cnf
中设置了max_allowed_packet
<>16M
,则新配置文件将覆盖该设置 . 因此,请务必检查此新配置文件,并删除该条目或根据您的需要进行调整 .我不确定是否通过从MySQL到MariaDB的交换引入了更改,或者Debian是否更改了配置文件在V9中的布局方式 .
我有一个类似的错误,并将失败,第0行的数据包大小512M . 这是一个明显损坏的innodb表(mysqlcheck显示确定) . 我最终重新创建了表,然后它只用了128M的小包就可以正常工作 .