mysql - MySQL Error 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 … 导致了同样的错误。

时间:

你可能需要对客户端( 你正在运行导入) 和运行它的守护进程mysqld进行更改,并接受导入。

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


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

同时,改变 my.cnf 或者 my.ini 文件mysqld部分和设置:


max_allowed_packet=100M

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


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

( 对数据包大小使用非常大的值。)

michaelpryor说过了,你必须改变客户机和守护进程mysqld服务器。

他的客户端command-line解决方案不错,但是ini文件并不总是这么做,具体取决于配置。

所以,打开一个终端,输入MySQL来获得一个MySQL提示符,然后发出以下命令:


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

保持MySQL提示符打开,并在第二个终端上运行 command-line SQL执行。

这可以在服务器部分的my.ini 文件( 在 Windows 上,位于 Program FilesMySQLMySQL服务器中) 中更改,例如:


[mysqld]

max_allowed_packet = 10M

再保险 my.cnf Mac OS X 当使用mysql的mysql.com dmg包分配

默认情况下,my.cnf 找不到。

你需要复制一个 /usr/local/mysql/support-files/my*.cnf/etc/my.cnf 并重新启动 mysqld 。 ( 如果你安装了的话,你可以在MySQL偏好面板中进行这里操作。)

在 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
#

解决方法是增加守护进程的MySQL max_allowed_packet 。 你可以通过以超级用户身份登录并运行以下命令来对运行的守护进程执行这里操作。


# 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

在 etc/my 。cnf中,尝试更改 max_allowed _packet和 net_buffer_length


max_allowed_packet=100000000
net_buffer_length=1000000 

如果无法工作,请尝试改为


max_allowed_packet=100M
net_buffer_length=100K 

...