我需要使用非常大的扩展插入执行SQL转储。我正在使用电脑中的官方命令行工具连接到局域网中的服务器。执行总是失败:
错误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
吗?
我读过很多文章,解释了如何实现这一点,但我得出的结论是,他们根本没有正确测试它。我的结论是:
-
Server的
max_allowed_packet
是一个硬编码的上限。您可以将整个服务器的设置更改为任何其他服务器端设置(配置文件或服务器命令行参数),但无法从客户端增加设置。 -
一些客户端(如官方命令行实用程序)允许在连接时设置
max_allowed_packet
。这是从客户端实际更改值的唯一方法(更改会话或全局变量对交换包的大小没有影响),但只有当您想降低时,它才有用。发送大于服务器设置的包仍然会触发与包相关的错误,因为服务器不会接受它们。
总结:
- 您必须将
max_allowed_packet
视为只读 - 如果它太小,您需要为整个服务器更改它,或者使用它
很遗憾,我无法提供官方文档的链接,但这个主题的文档记录很差