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

Posted

技术标签:

【中文标题】如何检查和设置max_allowed_pa​​cket mysql变量[重复]【英文标题】:how to check and set max_allowed_packet mysql variable [duplicate] 【发布时间】:2011-08-07 00:01:03 【问题描述】:

可能重复:mysql Error 1153 - Got a packet bigger than ‘max_allowed_packet’ bytes

您好,我收到错误消息:

[1153] Got a packet bigger than 'max_allowed_packet'bytes

但我没有对我的源代码进行任何更改,并且托管方声明他们没有对服务器设置进行任何更改。

我不知道发生了什么。但我正在努力寻找原因。

那么,如何通过php脚本检查max_allowed_packetmysql变量?

可以在源代码中设置吗?

【问题讨论】:

有时类型设置:my.ini 中的 max_allowed_pa​​cket = 16M 不起作用。尝试确定my.ini如下: set-variable = max_allowed_pa​​cket = 32M or set-variable = max_allowed_pa​​cket = 1000000000 然后重启服务器:/etc/init.d/mysql restart Here,同样的错误,“Packet for query is to large (5526600 > 1048576).”,是密码输入错误导致的,纠正后解决(使用正确的密码对应于MySQL 数据库用户)。 【参考方案1】:

max_allowed_packet 在 mysql 配置中设置,而不是在 php 端

[mysqld]
max_allowed_packet=16M 

你可以像这样在 mysql 中看到它的当前值:

SHOW VARIABLES LIKE 'max_allowed_packet';

您可以尝试像这样更改它,但这不太可能适用于共享主机:

SET GLOBAL max_allowed_packet=16777216;

你可以在这里阅读它http://dev.mysql.com/doc/refman/5.1/en/packet-too-large.html

编辑

[mysqld] 是使max_allowed_packet 至少从 mysql 版本 5.5 开始工作所必需的。

最近在 AWS EC2 上使用 Drupal 和 Solr 搜索引擎设置了一个实例,需要 32M max_allowed_packet。如果您在/etc/my.cnf 中设置[mysqld_safe](这是mysql 安装附带的默认设置)模式下的值,它不起作用。我没有深入研究这个问题。但是在我将其更改为[mysqld]并重新启动mysqld后,它就可以工作了。

【讨论】:

谢谢,我想说它在 my.ini 中,而不是在 php.ini 中 应该是SET GLOBAL max_allowed_packet=16777216;SET SESSION max_allowed_packet=16777216; 请注意,MySQL 文档中说:“从 MySQL 5.0.84 开始,此变量的会话值是只读的。在 5.0.84 之前,允许设置会话值,但没有效果。” dev.mysql.com/doc/refman/5.0/en/… @geofflee,“允许但没有效果”,哇甚至没有警告? 您需要配置客户端和服务器【参考方案2】:

以下 PHP 对我有用(使用 mysqli 扩展,但其他扩展的查询应该相同):

$db = new mysqli( 'localhost', 'user', 'pass', 'dbname' );
// to get the max_allowed_packet
$maxp = $db->query( 'SELECT @@global.max_allowed_packet' )->fetch_array();
echo $maxp[ 0 ];
// to set the max_allowed_packet to 500MB
$db->query( 'SET @@global.max_allowed_packet = ' . 500 * 1024 * 1024 );

因此,如果您有一个期望很长的查询,您可以确保 mysql 会接受它,例如:

$sql = "some really long sql query...";
$db->query( 'SET @@global.max_allowed_packet = ' . strlen( $sql ) + 1024 );
$db->query( $sql );

请注意,我在字符串长度上增加了 1024 个字节,因为according to the manual,

该值应该是 1024 的倍数;非倍数向下舍入到最接近的倍数。

这应该有望将 max_allowed_pa​​cket 设置为足够大以处理您的查询。我没有在共享主机上尝试过这个,所以和@Glebushka 一样的警告也适用。

【讨论】:

嗨,可以在 aws RDS 上编辑它吗? @YusufIbrahim 简短回答:我不知道。但对this article 的快速浏览表明它应该是可能的。【参考方案3】:

转到 cpanel 并以主管理员或超级管理员身份登录

    找到 SSH/Shell 访问(您将在 cpanel 的安全选项卡下找到)

    现在将超级管理员的用户名和密码设为rootwhatyougave

    note: do not give any username, cos, it needs permissions
    

    一旦进入控制台类型

    输入 'mysql' 并按下回车键,您会发现自己在

    mysql> /* 并在此处键入 */

    mysql> set global net_buffer_length=1000000;

    查询正常,0 行受影响(0.00 秒)

    mysql> set global max_allowed_packet=1000000000;

    查询正常,0 行受影响(0.00 秒)

现在上传并享受吧!!!

【讨论】:

以上是关于如何检查和设置max_allowed_pa​​cket mysql变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何查看CK编辑器版本

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

设置检查节点检查事件

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

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

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