我需要执行具有非常大的扩展插入的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
吗?
答案 0 :(得分:1)
我已经阅读了许多解释如何实现这一目标的文章,但我得出结论,他们根本没有正确地测试它。我的结论是:
服务器的max_allowed_packet
是硬编码的上限。您可以像任何其他服务器端设置(配置文件或服务器命令行参数)一样为整个服务器更改它,但无法从客户端增加它。
某些客户端(例如官方命令行实用程序)允许在连接上设置max_allowed_packet
。这是实际更改客户端值的唯一方法(更改会话或全局变量对交换包的大小没有影响),但只有在降低时才有用。发送大于服务器设置的软件包仍会触发与软件包相关的错误,因为服务器不会接受它们。
总结一下:
max_allowed_packet
视为只读。遗憾的是,我无法提供官方文档的链接,但这个主题的记录很少。