3

我需要使用非常大的扩展插入来执行 SQL 转储。我正在使用计算机中的官方命令行工具连接到 LAN 中的服务器。执行总是死亡:

错误 2006 (HY000): MySQL 服务器已消失

...而且我很确定这是由于max_allowed_packet设置很小:

mysql> SHOW VARIABLES LIKE 'max_allowed_packet';
+--------------------+----------+
| Variable_name      | Value    |
+--------------------+----------+
| max_allowed_packet | 10485760 |
+--------------------+----------+

有很多关于如何更改服务器设置的文档,但我想知道是否可以仅针对当前连接(即从客户端)更改它。我不需要通用解决方案,如果它适用于命令行工具,我会很高兴。

我检查了文档并发现了这一点

max_allowed_packet

发送到服务器或从服务器接收的最大数据包长度。(默认值为 16MB。)

...并随后尝试了这个:

mysql ^
    --max_allowed_packet=50M ^
    --compress ^
    --default-character-set=utf8 ^
    --skip-reconnect ^
    -h mysql.example.com -u foo -b bar

结果:所有要读取的命令max_allowed_packet仍然报告 10MB 并且服务器仍然消失。

max_allowed_packet能从客户端增加吗?

4

1 回答 1

2

我已经阅读了许多解释如何完成此任务的文章,但我得出的结论是他们根本没有正确测试它。我的结论是:

  • 服务器max_allowed_packet是硬编码的上限。您可以像任何其他服务器端设置(配置文件或服务器命令行参数)一样为整个服务器更改它,但无法从客户端增加它。

  • 一些客户端(例如官方命令行实用程序)允许设置max_allowed_packet连接。这是从客户端实际更改值的唯一方法(更改会话或全局变量对交换包的大小没有影响),但只有在您想降低它时才有用。发送大于服务器设置的包仍然会触发与包相关的错误,因为服务器不会接受它们。

总结一下:

  1. 您必须将max_allowed_packet其视为只读。
  2. 如果它太小,您需要为整个服务器更改它或使用它。

很遗憾,我无法提供官方文档的链接,但这个主题的文档记录很差。

于 2013-08-14T11:15:35.253 回答