如何检查和设置max_allowed_packet mysql 变量
嗨,我收到错误:
[1153] Got a packet bigger than 'max_allowed_packet'bytes
但是我没有对源代码进行任何更改,并且托管声明他们没有对服务器设置进行任何更改。
我不知道发生了什么。但我正试图找到原因。
那么,如何通过php脚本检查mysql变量?max_allowed_packet
是否可以在源代码中设置它?
嗨,我收到错误:
[1153] Got a packet bigger than 'max_allowed_packet'bytes
但是我没有对源代码进行任何更改,并且托管声明他们没有对服务器设置进行任何更改。
我不知道发生了什么。但我正试图找到原因。
那么,如何通过php脚本检查mysql变量?max_allowed_packet
是否可以在源代码中设置它?
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]是必要的,以使至少从mysql版本5.5开始工作。max_allowed_packet
最近在 AWS EC2 上设置了一个带有 Drupal 和 Solr 搜索引擎的实例,这需要 32M 。如果您在/etc/my.cnf中设置了(这是mysql安装附带的默认设置)模式下的值,则不起作用。我没有深入研究这个问题。但是在我将其更改为并重新启动mysqld之后,它起作用了。max_allowed_packet
[mysqld_safe]
[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个字节,因为根据手册,
该值应为 1024 的倍数;非多重数向下舍入到最接近的倍数。
这应该希望将max_allowed_packet大小设置为足够大以处理查询。我还没有在共享主机上尝试过,因此与@Glebushka相同的警告适用。