首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何检查和设置max_allowed_packet mysql变量

如何检查和设置max_allowed_packet mysql变量
EN

Stack Overflow用户
提问于 2011-04-17 01:51:14
回答 3查看 322.2K关注 0票数 126

可能重复:

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_packet的mysql变量呢?

这可以在源代码中设置吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-17 02:08:53

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

代码语言:javascript
复制
[mysqld]
max_allowed_packet=16M 

您可以在mysql中看到它的curent值,如下所示:

代码语言:javascript
复制
SHOW VARIABLES LIKE 'max_allowed_packet';

你可以尝试这样改变它,但这不太可能在共享主机上起作用:

代码语言:javascript
复制
SET GLOBAL max_allowed_packet=16777216;

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

编辑

从mysql 5.5版本开始,要使max_allowed_packet正常工作,mysqld是必需的。

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

票数 234
EN

Stack Overflow用户

发布于 2011-10-30 09:02:47

下面的PHP适用于我(使用mysqli扩展,但查询对于其他扩展应该是相同的):

代码语言:javascript
复制
$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会接受它,如下所示:

代码语言:javascript
复制
$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_packet大小来处理您的查询。我还没有在共享主机上尝试过,所以@Glebushka同样适用。

票数 34
EN

Stack Overflow用户

发布于 2011-12-13 21:34:06

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

  1. 查找SSH/外壳访问(您可以在cpanel的安全选项卡下找到)
  2. 现在将超级管理员的用户名和密码指定为rootwhatyougave

注意:不要给任何用户名,cos,它需要permissions

  • once你进入控制台类型

键入‘mysql’,然后按enter键,此时您会发现自己处于

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

mysql> set global net_buffer_length=1000000;

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

mysql> set global max_allowed_packet=1000000000;

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

现在上传并享受吧!

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5688403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档