我正在导入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 …
导致了同样的错误 .
13 回答
由于攻击者可以推送更大的数据包并使系统崩溃,因此使用更高的值会带来安全风险 .
因此,
max_allowed_packet
的最佳值将进行调整和测试 .最好是在需要时(使用
set global max_allowed_packet = xxx
)进行更改,而不是将其作为my.ini或my.conf的一部分进行更改 .这可以在服务器部分下的
my.ini
文件(在Windows上,位于\ Program Files \ MySQL \ MySQL服务器中)中更改,例如:我在共享托管环境中工作,我已经托管了一个基于Drupal的网站 . 我也无法编辑
my.ini
文件或my.conf
文件 .所以,我删除了所有与
Cache
相关的表,因此我可以解决这个问题 . 我仍然在寻找一个完美的解决方案/方法来处理这个问题 .Edit - 删除表为我创建了问题,因为Drupal期望这些表应该存在 . 所以我清空了这些表的内容,解决了这个问题 .
在CENTOS 6 /etc/my.cnf上,在[mysqld]部分下,正确的语法是:
修复是增加MySQL守护进程的max_allowed_packet . 您可以通过以Super身份登录并运行以下命令来对正在运行的守护程序执行此操作 .
然后导入转储:
将max_allowed_packet设置为与使用mysqldump转储它时相同(或更多) . 如果您不能这样做,请使用较小的值再次进行转储 .
也就是说,假设您使用mysqldump转储它 . 如果您使用了其他工具,那么您就可以自己动手了 .
有时类型设置:
在my.ini中无效 .
尝试确定my.ini如下:
要么
然后重启服务器:
在etc / my.cnf中尝试将max_allowed _packet和net_buffer_length更改为
如果这不起作用,那么尝试改为
您可能必须为客户端(您正在运行以执行导入)和正在运行并接受导入的守护程序mysqld更改它 .
对于客户端,您可以在命令行中指定它:
另外,在mysqld部分下的 change the my.cnf or my.ini file 并设置:
或者您可以在连接到同一服务器的MySQL控制台中运行这些 commands :
(对数据包大小使用非常大的值 . )
正如michaelpryor所说,你必须为客户端和守护进程mysqld服务器更改它 .
他对客户端命令行的解决方案很好,但是根据配置,ini文件并不总能解决问题 .
因此,打开一个终端,键入mysql以获取mysql提示符,并发出以下命令:
保持mysql提示符处于打开状态,并在第二个终端上运行命令行SQL执行 .
使用
max_allowed_packet
变量发出命令,如mysql --max_allowed_packet=32M -u root -p database < dump.sql
在mysql.com dmg包发行版中使用MySQL时,在Mac OS X上重新启动my.cnf
默认情况下,my.cnf无处可寻 .
您需要将
/usr/local/mysql/support-files/my*.cnf
之一复制到/etc/my.cnf
并重新启动mysqld
. (如果安装了它,可以在MySQL偏好设置面板中执行此操作 . )与您的问题略有不同,所以这里是谷歌的一个 .
如果你没有mysqldump SQL,那可能是你的SQL坏了 .
我只是在我的代码中意外地有一个未关闭的字符串文字而得到了这个错误 . 松软的手指发生 .
这是一个非常棒的错误消息,可以获得失控的字符串,感谢MySQL!