SET GLOBAL max_allowed_pa​​cket 不起作用[重复]

Posted

技术标签:

【中文标题】SET GLOBAL max_allowed_pa​​cket 不起作用[重复]【英文标题】:SET GLOBAL max_allowed_packet doesn't work [duplicate] 【发布时间】:2012-04-12 22:52:47 【问题描述】:

我发现了如何使用SET GLOBALmysql 中更改 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_pa​​cket = 1048576。我错过了什么?

【问题讨论】:

微风,在这个时间点,7 年后,SHOW GLOBAL VARIABLES LIKE 'max_allowed_pa​​cket';应该显示一个 32MB 的数字 - 取决于版本。许多细节在 7 年内发生了变化。此外,SET GLOBAL xxx=xx 适用于实例的新连接。如果您的配置未成功更改,并且您停止/启动实例,您将获得与过去几天相同的值。 【参考方案1】:

Hmmmm.. 看来你已经点击了这个NOT-A-BUG。 :)

如果您更改全局系统变量,该值会被记住并用于新的 连接,直到服务器重新启动。 (进行全局系统变量设置 永久的,你应该在一个选项文件中设置它。)任何客户端都可以看到更改 访问该全局变量。但是,更改会影响相应的会话 仅适用于更改后连接的客户端。全局变量更改确实 不影响当前连接的任何客户端的会话变量(甚至不影响 发出 SET GLOBAL 语句的客户端)。

也请参考this。阅读 Shane Bester 的解释。

您应该从 my.ini/my.cnf 文件更改并重新启动服务器以使 max_allowed_pa​​cket 设置生效。

【讨论】:

除了“错误”被关闭为“不是错误”。 谢谢先生您的提示回复。但之后我尝试重新启动 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 配置的用户,问题可能是 ma​​x_allowed_pa​​cket 变量被稍后调用的配置文件覆盖。

在我的情况下,我尝试导入数据库并且服务器回答了我: 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_pa​​cket = 16M" 以期望值为例 "max_allowed_pa​​cket = 64M"

【讨论】:

帮了我大忙,然后我跑了service mariadb restartservice apache2 restart【参考方案4】:

我也遇到了这个问题,就我而言,我安装了多个版本的 MySql。 为可能在 ma​​c 上使用自制软件设置 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_pa​​cket 请求 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_pa​​cket 不起作用[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何检查和设置max_allowed_pa​​cket mysql变量[重复]

MySQL 抱怨 max_allowed_pa​​cket 违规,查询短于允许的限制

MySQL 错误 1153 - 收到的数据包大于“max_allowed_pa​​cket”字节

MySQL 错误 1153 - 收到的数据包大于“max_allowed_pa​​cket”字节

在 AWS RDS 上托管的数据库上导入 SQL 脚本期间出现 MySql 错误“max_allowed_pa​​cket”字节

Amazon RDS 无法执行 SET GLOBAL 命令