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软件包安装了MySQL 5的Mac。
我该在哪里更改max_allowed_packet
才能导入转储?
还有什么我应该设置的吗?
仅仅运行mysql --max_allowed_packet = 32M会导致同样的错误。
解决方案
可以在服务器部分下的" my.ini"文件(在Windows中,位于\ Program Files \ MySQL \ MySQL Server中)中对此进行更改,例如:
[mysqld] max_allowed_packet = 10M
使用max_allowed_packet
变量发出如下命令
mysql --max_allowed_packet = 32M
-u root -p数据库<dump.sql`
将max_allowed_packet设置为与使用mysqldump进行转储时相同(或者更多)。如果我们不能这样做,请再次使用较小的值进行转储。
也就是说,假设我们使用mysqldump进行了转储。如果我们使用其他工具,那我们就一个人了。
我们可能必须为客户端(我们正在运行以执行导入)和正在运行并接受导入的守护程序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;
(对于数据包大小,请使用非常大的值。)
在mysql.com dmg软件包分发中使用MySQL时,在Mac OS X上重新启动my.cnf
默认情况下,找不到my.cnf。
我们需要将/usr/local/mysql/support-files/my*.cnf中的一个复制到/etc/my.cnf中,然后重新启动mysqld。 (如果已安装,则可以在MySQL首选项窗格中进行。)
正如michaelpryor所说,我们必须为客户端和守护程序mysqld服务器都更改它。
他为客户端命令行提供的解决方案很好,但是ini文件并非总能做到这一点,具体取决于配置。
因此,打开终端,输入mysql以获得mysql提示符,然后发出以下命令:
set global net_buffer_length=1000000; set global max_allowed_packet=1000000000;
保持mysql提示符处于打开状态,并在第二个终端上运行命令行SQL执行。
与问题无关,因此这里是Google的问题之一。
如果我们没有mysqldump SQL,则可能是SQL已损坏。
我只是在我的代码中不小心包含了一个未封闭的字符串文字而得到了这个错误。马虎的手指发生了。
对于失控的字符串,这是一条奇妙的错误消息,感谢MySQL!