我使用 mysqldump 创建一个用于备份的平面文件。我已使用此文件在备用服务器上重新创建数据库。我在命令行上通过 ssh 运行导入过程,但收到多个Packet too Large
错误。
我用更大的 max_allowed_packet(即 1000M)重新启动了 mysql,但仍然收到错误。我什至尝试在导入文件中设置 max_allowed_packet,仍然收到错误。
有没有办法确保设置 max_allowed_packet 和/或使用 mysqldump 来创建一个不会导致此问题的文件?
以供参考:
未压缩的 mysqldump 文件约为 2GB
数据库类型为 INNODB
我首先想到的是max_allowed_packet实际控制的内容。这是我发现的:
根据"Understanding MySQL Internals" (ISBN 0-596-00957-7) 的第 99 页,这里有第 1-3 段对其进行解释:
鉴于 max_allowed_packet 的定义,然后我从 ServerFault 中发现了其他内容:如果您有很多大 blob 对象,innodb_log_file_size 和 innodb_log_buffer_size 的组合必须大于您最大 blob 对象的十倍
牢记这两件事,我会将 /etc/my.cnf 中的 innodb_log_file_size 增加到允许的最大大小 2047M。这当然需要以下
这将容纳您数据中可能存在的任何大块。
MySQL
max_allowed_packet
仍然必须在启动它的 shell 的范围内——确实ulimit -a
表明这data seg size
是无限的吗?出于某种原因,被设计
max_allowed_packet
忽略了?实际的补码是。所以改为尝试mysqldump
net_buffer_length