为什么mysqldump 中的max_allowed_pa​​cket 比my.cnf 中的mysqld 大?

Yog*_*oga 5 mysql mysqldump mysql-5.5

如果您查看示例配置,例如/usr/share/mysql/my-large.cnf,您会发现..

[mysqld]
max_allowed_packet = 1M

[mysqldump]
max_allowed_packet = 16M
Run Code Online (Sandbox Code Playgroud)

重点是什么?

因为当您使用mysqldumpwith导出转储时max_allowed_packet,可能无法成功导入到当前的 mysql?例如/sf/ask/6518991/

Shl*_*ach 4

max_allowed_packet变量限制单个结果集的大小。在该[mysqld]部分中,任何正常连接只能1M在单个查询中获取有价值的数据。您mysqldump通常会生成“扩展 INSERT”查询,其中在同一命令中列出多行INSERT。那么,最好将此变量设置为高。

以上是简单的解释。现在,至于你的问题“有什么意义?” ——没有明确的答案。这my-XXXXX.cnf组文件早已过时,并且存在问题,包括通常未达成一致的建议(例如应分配给 的内存量innodb_buffer_pool_size)。因此,将其作为一般起点。特别是,这些设置与可用内存(例如 RAM)非常低的系统相关128M,因此这些数字并不真正适用于当今的硬件。

有人可能会争辩说,您不一定会将转储导入到同一台服务器中,因此可以将转储导入到具有更高设置的另一台服务器中max_allowed_packet

作为旁注,我通常设置max_allowed_packet为非常高的值,例如32M64M。与其他变量(如 )相反sort_buffer_sizemax_allowed_packet您只需支付您需要的费用。64M因此,如果不需要,连接将不会分配完整空间。

限制1M意味着您可能有一些行带有某些TEXTBLOB,可能大于1M,在这种情况下,您实际上无法读取该行。