如何检查和设置max_allowed_packet mysql变量[重复]
Posted
技术标签:
【中文标题】如何检查和设置max_allowed_packet 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_packet
mysql变量?
可以在源代码中设置吗?
【问题讨论】:
有时类型设置:my.ini 中的 max_allowed_packet = 16M 不起作用。尝试确定my.ini如下: set-variable = max_allowed_packet = 32M or set-variable = max_allowed_packet = 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_packet 设置为足够大以处理您的查询。我没有在共享主机上尝试过这个,所以和@Glebushka 一样的警告也适用。
【讨论】:
嗨,可以在 aws RDS 上编辑它吗? @YusufIbrahim 简短回答:我不知道。但对this article 的快速浏览表明它应该是可能的。【参考方案3】:转到 cpanel 并以主管理员或超级管理员身份登录
找到 SSH/Shell 访问(您将在 cpanel 的安全选项卡下找到)
现在将超级管理员的用户名和密码设为root
或whatyougave
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_packet mysql变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章
SET GLOBAL max_allowed_packet 不起作用[重复]
MySQL 抱怨 max_allowed_packet 违规,查询短于允许的限制