MySQL错误1153 – 获得了大于'max_allowed_packet'字节的数据包
我正在导入一个MySQL转储,并得到以下错误。
$ mysql foo < foo.sql ERROR 1153 (08S01) at line 96: Got a packet bigger than 'max_allowed_packet' bytes
显然在数据库中有附件,这使得插入非常大。
这是在我的本地机器上,一台安装有MySQL 5的MySQL的MySQL软件包。
我在哪里更改max_allowed_packet
以便能够导入转储?
还有什么我应该设置?
只是运行mysql --max_allowed_packet=32M …
导致相同的错误。
您可能必须更改它为客户端(您正在运行以执行导入)和正在运行的守护程序mysqld并接受导入。
对于客户端,您可以在命令行中指定它:
mysql --max_allowed_packet=100M -u root -p database < dump.sql
另外, 更改 mysqld部分下的my.cnf或my.ini文件 ,并设置:
max_allowed_packet=100M
或者你可以在连接到同一服务器的MySQL控制台中运行这些命令 :
set global net_buffer_length=1000000; set global max_allowed_packet=1000000000;
(为数据包大小使用一个非常大的值。)
正如michaelpryor所说,你必须改变它的客户端和守护进程mysqld服务器。
他的客户端命令行的解决scheme是好的,但ini文件并不总是伎俩,取决于configuration。
所以,打开一个terminal,inputmysql来得到一个mysql提示符,然后发出这些命令:
set global net_buffer_length=1000000; set global max_allowed_packet=1000000000;
保持mysql提示符打开,并在第二个terminal上运行命令行SQL执行。
这可以在服务器部分下的my.ini
文件(在Windows上位于\ Program Files \ MySQL \ MySQL Server)中进行更改,例如:
[mysqld] max_allowed_packet = 10M
当从mysql.com dmg包分发使用MySQL时,请在Mac OS X上重新使用my.cnf
默认情况下,my.cnf无处可找。
您需要将/usr/local/mysql/support-files/my*.cnf
一个复制到/etc/my.cnf
并重新启动mysqld
。 (如果你安装了MySQL,你可以在MySQL偏好窗格中进行操作。)
在etc / my.cnf中,尝试将max_allowed _packet和net_buffer_length更改为
max_allowed_packet=100000000 net_buffer_length=1000000
如果这不起作用,然后尝试改变
max_allowed_packet=100M net_buffer_length=100K
修正是增加MySQL守护进程的max_allowed_packet。 您可以通过以Super身份login并运行以下命令来对运行的守护程序执行此操作。
# mysql -u admin -p mysql> set global net_buffer_length=1000000; Query OK, 0 rows affected (0.00 sec) mysql> set global max_allowed_packet=1000000000; Query OK, 0 rows affected (0.00 sec)
然后导入你的转储:
gunzip < dump.sql.gz | mysql -u admin -p database
在CENTOS 6 /etc/my.cnf下的[mysqld]部分,正确的语法是:
[mysqld] # added to avoid err "Got a packet bigger than 'max_allowed_packet' bytes" # net_buffer_length=1000000 max_allowed_packet=1000000000 #
使用发出类似命令的max_allowed_packet
variables
mysql --max_allowed_packet=32M -u root -p database < dump.sql
与您的问题略有不同,所以这里是Google的一个。
如果你没有mysqldump的SQL,可能是你的SQL坏了。
我刚刚得到了这个错误,我的代码中意外地有一个unclosedstring文字。 Sl fingers的手指发生。
这是一个奇妙的错误消息来获得失控的string,感谢MySQL!
将max_allowed_packet
为更高值是一种安全风险,因为攻击者可以推送更大的数据包并使系统崩溃。
所以, max_allowed_packet
最佳值被调整和testing。
根据需要更改(使用set global max_allowed_packet = xxx
)比将它作为my.ini或my.conf的一部分更好 。
将max_allowed_packet设置为与使用mysqldump转储时相同(或更多)。 如果你不能这样做,再次使用较小的值进行转储。
也就是说,假设你用mysqldump转储它。 如果你使用了其他工具,那么你是自己的。
我在一个共享的宿主环境中工作,我已经托pipe了一个基于Drupal的网站。 我无法编辑my.ini
文件或my.conf
文件。
所以,我删除了所有与Cache
相关的表,因此我可以解决这个问题。 我仍然在寻找一个完美的解决scheme来处理这个问题。
编辑 – 删除表为我创build了问题,因为Drupal期待这些表应该存在。 所以我清空了解决问题的这些表格的内容。
有时types设置:
max_allowed_packet = 16M
在my.ini中不起作用。
尝试确定my.ini如下:
set-variable = max_allowed_packet = 32M
要么
set-variable = max_allowed_packet = 1000000000
然后重新启动服务器:
/etc/init.d/mysql restart