我正在导入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
另外,更改 mysqld部分下的my.cnf或my.ini文件并设置:
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执行.
这可以my.ini
在服务器部分下的文件中(在Windows上,位于\ Program Files\MySQL\MySQL Server中)进行更改,例如:
[mysqld] max_allowed_packet = 10M
默认情况下,my.cnf无处可寻.
你需要复制一个/usr/local/mysql/support-files/my*.cnf
到/etc/my.cnf
并重新启动mysqld
.(如果安装了它,可以在MySQL偏好设置面板中执行此操作.)
在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
修复是增加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
在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 #