我导入一个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…导致同样的错误。
您可能必须同时为客户端(您正在运行导入操作)和正在运行并接受导入操作的守护进程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;
(使用一个非常大的值作为包大小。)
您可能必须同时为客户端(您正在运行导入操作)和正在运行并接受导入操作的守护进程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;
(使用一个非常大的值作为包大小。)
正如michaelpryor所说,您必须同时为客户机和守护进程mysqld服务器更改它。
他为客户端命令行提供的解决方案很好,但是ini文件并不总是有效,这取决于配置。
所以,打开一个终端,输入mysql来得到一个mysql提示符,然后发出这些命令:
set global net_buffer_length=1000000;
set global max_allowed_packet=1000000000;
保持mysql提示打开,并在第二个终端上运行命令行SQL执行。