我导入一个MySQL转储和得到以下错误。

$ mysql foo < foo.sql 
ERROR 1153 (08S01) at line 96: Got a packet bigger than 'max_allowed_packet' bytes

显然,数据库中有附件,需要进行非常大的插入。


这是在我的本地机器上,一台安装了MySQL 5的Mac电脑。

我在哪里改变max_allowed_packet能够导入转储?

还有什么需要我设置的吗?

只是运行mysql——max_allowed_packet=32M…导致同样的错误。


当前回答

将max_allowed_packet设置为较高的值存在安全风险,因为攻击者可能会推送更大的数据包并导致系统崩溃。

因此,max_allowed_packet的最优值将被调优和测试。

最好在需要时进行更改(使用set global max_allowed_packet = xxx) 而不是把它作为my.ini或my.conf的一部分。

其他回答

我已经通过这个查询解决了我的问题

SET GLOBAL max_allowed_packet=1073741824;

并使用此查询检查max_allowed_packet

SHOW VARIABLES LIKE 'max_allowed_packet';

当使用mysql.com dmg包分发的MySQL时,在Mac OS X上重新使用my.cnf

默认情况下,my.cnf无处可寻。

你需要拷贝一个/usr/local/mysql/support-files/my*.cnf文件到/etc/my.cnf并重新启动mysqld。(如果你安装了它,你可以在MySQL首选项窗格中这样做。)

您可能必须同时为客户端(您正在运行导入操作)和正在运行并接受导入操作的守护进程mysqld更改它。

对于客户端,您可以在命令行上指定它:

mysql --max_allowed_packet=100M -u root -p database < dump.sql

此外,更改my.cnf或my.ini文件(通常在/etc/mysql/下),并设置:

max_allowed_packet=100M

或者你可以在连接到同一台服务器的MySQL控制台中运行这些命令:

set global net_buffer_length=1000000; 
set global max_allowed_packet=1000000000;

(使用一个非常大的值作为包大小。)

有时类型设置:

max_allowed_packet = 16M

在my.ini中不能工作。

尝试确定my.ini,如下所示:

set-variable = max_allowed_packet = 32M

or

set-variable = max_allowed_packet = 1000000000

然后重启服务器:

/etc/init.d/mysql restart

正如michaelpryor所说,您必须同时为客户机和守护进程mysqld服务器更改它。

他为客户端命令行提供的解决方案很好,但是ini文件并不总是有效,这取决于配置。

所以,打开一个终端,输入mysql来得到一个mysql提示符,然后发出这些命令:

set global net_buffer_length=1000000; 
set global max_allowed_packet=1000000000; 

保持mysql提示打开,并在第二个终端上运行命令行SQL执行。