我正在导入MySQL转储,并收到以下错误。
1 2
| $ 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 …会导致相同的错误。
您可能必须为客户端(您正在运行以执行导入)和正在运行并接受导入的守护程序mysqld进行更改。
对于客户端,可以在命令行上指定它:
1
| mysql --max_allowed_packet=100M -u root -p database < dump.sql |
另外,更改mysqld部分下的my.cnf或my.ini文件并设置:
或者您可以在连接到同一服务器的MySQL控制台中运行以下命令:
1 2
| set global net_buffer_length=1000000;
set global max_allowed_packet=1000000000; |
(对于数据包大小,请使用非常大的值。)
正如michaelpryor所说,您必须为客户端和守护程序mysqld服务器都进行更改。
他为客户端命令行提供的解决方案很好,但是ini文件并非总能做到这一点,具体取决于配置。
因此,打开终端,输入mysql以获得mysql提示符,然后发出以下命令:
1 2
| set global net_buffer_length=1000000;
set global max_allowed_packet=1000000000; |
保持mysql提示符处于打开状态,并在第二个终端上运行命令行SQL执行。
可以在服务器部分下的my.ini文件(在Windows中,位于 Program Files MySQL MySQL Server中)中对此进行更改,例如:
1 2 3
| [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首选项窗格中进行。)
在etc / my.cnf中,尝试将max_allowed _packet和net_buffer_length更改为
1 2
| max_allowed_packet=100000000
net_buffer_length=1000000 |
如果这不起作用,请尝试更改为
1 2
| max_allowed_packet=100M
net_buffer_length=100K |
解决方法是增加MySQL守护程序的max_allowed_pa??cket。您可以通过以超级用户身份登录并运行以下命令,对正在运行的守护程序执行此操作。
1 2 3 4 5 6 7
| # 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) |
然后导入转储:
1
| gunzip < dump.sql.gz | mysql -u admin -p database |
在CENTOS 6 /etc/my.cnf的[mysqld]部分下,正确的语法是:
1 2 3 4 5 6
| [mysqld]
# added to avoid err"Got a packet bigger than 'max_allowed_packet' bytes"
#
net_buffer_length=1000000
max_allowed_packet=1000000000
# |
与您的问题无关,因此这里是Google的问题之一。
如果没有mysqldump SQL,则可能是您的SQL已损坏。
我只是在我的代码中意外包含未封闭的字符串文字而收到此错误。马虎的手指发生了。
对于失控的字符串,这是一条奇妙的错误消息,感谢MySQL!
使用max_allowed_packet变量发出如下命令
mysql --max_allowed_packet=32M
-u root -p database < dump.sql
将max_allowed_packet设置为较高的值存在安全风险,因为攻击者可以推入更大尺寸的数据包并使系统崩溃。
因此,要调整和测试max_allowed_packet的最佳值。
最好在需要时进行更改(使用set global max_allowed_packet = xxx)
而不是将其作为my.ini或my.conf的一部分。
有时键入设置:
1
| max_allowed_packet = 16M |
在my.ini中不起作用。
尝试确定my.ini,如下所示:
1
| set-variable = max_allowed_packet = 32M |
要么
1
| set-variable = max_allowed_packet = 1000000000 |
然后重新启动服务器:
1
| /etc/init.d/mysql restart |
错误:
ERROR 1153 (08S01) at line 6772: Got a packet bigger than
'max_allowed_packet' bytes Operation failed with exitcode 1
查询:
1 2
| SET GLOBAL max_allowed_packet=1073741824;
SHOW VARIABLES LIKE 'max_allowed_packet'; |
最大值:
1 2 3 4
| Default Value (MySQL >= 8.0.3) 67108864
Default Value (MySQL <= 8.0.2) 4194304
Minimum Value 1024
Maximum Value 1073741824 |
我在共享托管环境中工作,并且托管了一个基于Drupal的网站。我也无法编辑my.ini文件或my.conf文件。
因此,我删除了与Cache相关的所有表,因此可以解决此问题。我仍然在寻找解决此问题的完美解决方案/方式。
编辑-删除表对我来说造成了问题,因为Coz Drupal希望这些表应该存在。因此,我清空了这些表的内容,从而解决了问题。
将max_allowed_pa??cket设置为与使用mysqldump进行转储时相同(或更多)。如果您不能这样做,请再次使用较小的值进行转储。
也就是说,假设您使用mysqldump进行了转储。如果您使用其他工具,那您就一个人了。