如何检查并设置mysqlvariablesmax_allowed_pa​​cket

可能重复:
MySQL错误1153 – 获得了大于'max_allowed_pa​​cket'字节的数据包

嗨,我得到的错误:

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

但我没有改变我的源代码和托pipe状态,他们没有做任何改变的服务器设置。

我不知道发生了什么事。 但我试图find原因。

那么,如何通过php脚本检查max_allowed_packet mysqlvariables?

并可以在源代码中设置它?

max_allowed_packet在mysqlconfiguration中设置,而不是在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

编辑

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

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

下面的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字节的string的长度,因为根据手册 ,

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

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

转到cPanel并以主pipe理员或超级pipe理员身份login

  1. findSSH / Shell访问(你会发现在cPanel的安全选项卡下)

  2. 现在给超级pipe理员的用户名和密码作为rootwhatyougave

     note: do not give any username, cos, it needs permissions 
  3. 一旦你进入控制台types

    键入“ mysql ”,然后按回车,你会发现你自己

    mysql> / *,然后在这里input* /

    mysql> set global net_buffer_length=1000000;

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

    mysql> set global max_allowed_packet=1000000000;

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

现在上传和享受!