首页 文章

如何检查和设置max_allowed_packet mysql变量[重复]

提问于
浏览
82

可能重复:MySQL错误1153 - 获得的数据包大于'max_allowed_packet'字节

嗨,我收到错误:

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

但我没有对我的源代码进行任何更改,托管表示他们没有对服务器设置进行任何更改 .

我不知道发生了什么 . 但我试图找到原因 .

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

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

3 回答

  • 170

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

    [mysqld]
    max_allowed_packet=16M
    

    你可以在mysql中看到它的有用 Value ,如下所示:

    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

    EDIT

    至少从mysql 5.5开始,[mysqld]必须使 max_allowed_packet 正常工作 .

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

  • 28

    以下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的倍数; nonmultiples向下舍入到最接近的倍数 .

    这应该有希望将max_allowed_packet大小设置得足够大以处理您的查询 . 我没有在共享主机上尝试过这个,所以与@Glebushka相同的警告适用 .

  • 4

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

    • 查找SSH / Shell访问(您可以在cpanel的安全选项卡下找到)

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

    note: do not give any username, cos, it needs permissions
    
    • 一旦进入控制台类型

    输入' mysql '然后按Enter键即可找到你自己

    mysql> / 并在此处输入 /

    mysql> set global net_buffer_length=1000000;

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

    mysql> set global max_allowed_packet=1000000000;

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

    现在上传并享受!

相关问题