我导入一个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的一部分。

其他回答

错误:

第6772行错误1153 (08S01):收到的数据包大于 exitcode 1操作失败

查询:

SET GLOBAL max_allowed_packet=1073741824;
SHOW VARIABLES LIKE 'max_allowed_packet'; 

最大的值:

Default Value (MySQL >= 8.0.3)  67108864
Default Value (MySQL <= 8.0.2)  4194304
Minimum Value   1024
Maximum Value   1073741824

在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设置为与使用mysqldump转储时相同(或更多)的值。如果不能这样做,请使用较小的值再次转储。

也就是说,假设您使用mysqldump转储了它。如果你使用其他工具,你就只能靠自己了。

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

SET GLOBAL max_allowed_packet=1073741824;

并使用此查询检查max_allowed_packet

SHOW VARIABLES LIKE 'max_allowed_packet';

修正方法是增加MySQL守护进程的max_allowed_packet。通过以Super身份登录并运行以下命令,可以对正在运行的守护进程执行此操作。

# 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