SET GLOBAL max_allowed_packet 不起作用[重复]
Posted
技术标签:
【中文标题】SET GLOBAL max_allowed_packet 不起作用[重复]【英文标题】:SET GLOBAL max_allowed_packet doesn't work [duplicate] 【发布时间】:2012-04-12 22:52:47 【问题描述】:我发现了如何使用SET GLOBAL
在 mysql 中更改 max_allowed_packet
的默认值。但是,每次我使用这个命令时,默认值都保持不变!
我使用了这些命令:
mysql --user=root --password=mypass
mysql> SET GLOBAL max_allowed_packet=32*1024*1024;
Query OK, 0 rows affected (0.00 secs)
mysql> SHOW VARIABLES max_allowed_packet;
然后结果是 max_allowed_packet = 1048576。我错过了什么?
【问题讨论】:
微风,在这个时间点,7 年后,SHOW GLOBAL VARIABLES LIKE 'max_allowed_packet';应该显示一个 32MB 的数字 - 取决于版本。许多细节在 7 年内发生了变化。此外,SET GLOBAL xxx=xx 适用于实例的新连接。如果您的配置未成功更改,并且您停止/启动实例,您将获得与过去几天相同的值。 【参考方案1】:Hmmmm.. 看来你已经点击了这个NOT-A-BUG。 :)
如果您更改全局系统变量,该值会被记住并用于新的 连接,直到服务器重新启动。 (进行全局系统变量设置 永久的,你应该在一个选项文件中设置它。)任何客户端都可以看到更改 访问该全局变量。但是,更改会影响相应的会话 仅适用于更改后连接的客户端。全局变量更改确实 不影响当前连接的任何客户端的会话变量(甚至不影响 发出 SET GLOBAL 语句的客户端)。
也请参考this。阅读 Shane Bester 的解释。
您应该从 my.ini/my.cnf 文件更改并重新启动服务器以使 max_allowed_packet 设置生效。
【讨论】:
除了“错误”被关闭为“不是错误”。 谢谢先生您的提示回复。但之后我尝试重新启动 mysql,但我仍然得到 1 Mb 的限制! @J-16 SDiZ,是的,他们已将问题标记为 Not-a-bug(问题,这仍然让我们感到困惑)。 @Hossein,你是不是从 my.ini/my.cnf 改过来并重启了服务器? @Ashwin A:不,先生,在发出命令“SET GLOBAL ...”后,我退出了 mysql 并重新启动它。我以为这就够了。我尝试编辑 my.ini/my.cnf 并报告回来。顺便再次感谢您【参考方案2】:运行后
set global max_allowed_packet=1000000000;
你必须重启mysql之前
SHOW VARIABLES LIKE 'max_allowed_packet'
将显示新值。
我在通过 MAC OSX 系统首选项重新启动 mysql 时遇到了这个问题,并且值没有改变。所以通过控制台登录mysql
mysql -u root -p
更改它然后重新启动 mySql 似乎有效。不过可能是 OS X 的一个怪癖。
【讨论】:
【参考方案3】:对于使用 MariaDb 配置的用户,问题可能是 max_allowed_packet 变量被稍后调用的配置文件覆盖。
在我的情况下,我尝试导入数据库并且服务器回答了我: ERROR 2006 (HY000) at line 736: MySQL server has gone away
我发现文件:
/etc/mysql/mariadb.conf.d/50-server.cnf
稍后调用
/etc/mysql/conf.d/mysql.cnf
我尝试在“mysql.cnf”文件中不断更改,但该值在“50-server.cnf”中被覆盖。
所以解决办法是进入文件
/etc/mysql/mariadb.conf.d/50-server.cnf
而不是 "max_allowed_packet = 16M" 以期望值为例 "max_allowed_packet = 64M"
【讨论】:
帮了我大忙,然后我跑了service mariadb restart
和service apache2 restart
。【参考方案4】:
我也遇到了这个问题,就我而言,我安装了多个版本的 MySql。
为可能在 mac 上使用自制软件设置 MySql 并且在您的 my.cnf
文件中设置 max_allowed_packet
值时遇到问题的任何人添加此注释。
最重要的信息是my.cnf
文件可以存在于不同的位置(摘自https://github.com/rajivkanaujia/alphaworks/wiki/Install-MySQL-using-Homebrew)-
/usr/local/etc/my.cnf --> Global Access
/usr/local/etc/my.cnf --> Global Access
/usr/local/Cellar/mysql/5.7.18/my.cnf --> Sever Level Access
~/.my.cnf --> User Level Access
因为我通过 Home brew 安装了 MySql 5.6,所以我在 -
/usr/local/Cellar/mysql\@5.6/5.6.43/my.cnf
接下来的步骤 -
用必要的max_allowed_packet value
更新[mysqld]
组下的/usr/local/Cellar/mysql\@5.6/5.6.43/my.cnf
文件 -
[mysqld]
max_allowed_packet=5G
使用 brew 服务重启 mysql -
brew services restart mysql@5.6
连接/重新连接mysql shell,使用-验证配置是否生效
show variables like 'max_allowed_packet';
【讨论】:
为 max_allowed_packet 请求 5G 可能会限制在此 URL 中找到的最大值 - dev.mysql.com/doc/refman/5.6/en/server-system-variables.html【参考方案5】:对于遇到此问题的任何人来说,这是一种查看变量的快速方法。要取回值,您需要运行
SHOW VARIABLES LIKE 'max_allowed_packet'
【讨论】:
OP 这样做了,但由于接受的答案中列出的原因,它没有返回预期值。以上是关于SET GLOBAL max_allowed_packet 不起作用[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何检查和设置max_allowed_packet mysql变量[重复]
MySQL 抱怨 max_allowed_packet 违规,查询短于允许的限制
MySQL 错误 1153 - 收到的数据包大于“max_allowed_packet”字节
MySQL 错误 1153 - 收到的数据包大于“max_allowed_packet”字节
在 AWS RDS 上托管的数据库上导入 SQL 脚本期间出现 MySql 错误“max_allowed_packet”字节