用宝塔面板导入大SQL文件时,经常遇到卡住、报错甚至直接中断的情况。最典型的错误提示是:Got a packet bigger than 'max_allowed_packet' bytes。简单来说,就是MySQL服务端允许接收的最大单个数据包太小了,而你的SQL文件里可能包含超长的INSERT语句(比如带有大字段、BLOB或者长文本),或者整个文件被客户端一次性读取后,试图当成一个请求发送出去。

关键点在于:这个限制同时存在于服务端(max_allowed_packet)和客户端(比如phpMyAdmin、Na vicat、mysql命令行工具)。但宝塔面板默认走的是PHP+phpMyAdmin的导入方式,所以实际瓶颈往往出在PHP层或MySQL客户端的配置上。

如何确认并修改MySQL服务端的max_allowed_packet

先登录服务器终端,检查一下当前值:

mysql -u root -p -e "SHOW VARIABLES LIKE 'max_allowed_packet';"

看到的值通常是4194304(也就是4MB),对于几百MB的SQL文件来说,完全不够用。

修改分两步走:

⚠️ 注意:数值单位必须写M(大写),不能写mMB;也不能写成512*1024*1024这种表达式,MySQL不识别。

为什么改了服务端还不行?别忘了phpMyAdmin和PHP的限制

宝塔面板通过phpMyAdmin导入,它本身受PHP运行环境约束:

另外,phpMyAdmin自身也有导入限制。在/www/server/phpmyadmin/libraries/config.default.php中搜索$cfg['UploadDir']上方附近,找到:

$cfg['ExecTimeLimit'] = 0;

确保这行存在且值为0,表示不限制执行时间。

更可靠的大文件导入方式:绕过phpMyAdmin,直接命令行导入

如果改完配置依然失败,或者文件超过1GB,建议放弃面板上传,改用终端导入:

这个--max_allowed_packet是客户端参数,和my.cnf里的服务端设置独立,必须显式指定才生效。

大文件导入耗时较长,别关终端;导入中途断开的话,可以用screennohup包裹一下。

有些SQL文件开头没指定数据库,记得先手动创建空库:CREATE DATABASE `dbname` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

改配置不难,但漏掉客户端或PHP层任一环节都会白忙。真正稳定的大文件迁移,终究得回到命令行。

本文转载于:https://www.php.cn/faq/2313352.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。