你能从客户端增加max_allowed_pa​​cket吗?

时间:2012-11-16 13:15:10

标签: mysql windows-7 mysql-5.5

我需要执行具有非常大的扩展插入的SQL转储。我正在使用计算机中的official command-line tool连接到LAN中的服务器。执行总是死掉:

  

ERROR 2006(HY000):MySQL服务器已经消失

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

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

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

我检查过文档和found this

  

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吗?

1 个答案:

答案 0 :(得分:1)

我已经阅读了许多解释如何实现这一目标的文章,但我得出结论,他们根本没有正确地测试它。我的结论是:

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

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

总结一下:

  1. 您必须将max_allowed_packet视为只读。
  2. 如果它太小,您需要为整个服务器更改它或使用它。
  3. 遗憾的是,我无法提供官方文档的链接,但这个主题的记录很少。