必须同步查全局和会话级max_allowed_packet及timeout值:select @@global.max_allowed_packet; select @@session.max_allowed_packet; show variables like '%timeout%';若会话值远小于全局值,说明php或客户端连接环节限制未解除。

查清当前生效的 max_allowed_packet 值
报错 ERROR 2006 (HY000): MySQL server has gone away 最常由 max_allowed_packet 不足触发,但很多人只改了服务端配置,却没确认 phpMyAdmin 实际用的是哪个值。服务端有全局值(@@global.max_allowed_packet),每个连接还有会话值(@@session.max_allowed_packet),而 phpMyAdmin 建连时可能被 PHP 或中间件强制设低。
必须登录 MySQL 执行这三条命令验证:
SELECT @@global.max_allowed_packet;SELECT @@session.max_allowed_packet;-
SHOW VARIABLES LIKE '%timeout%';(重点看wait_timeout和interactive_timeout)
如果 @@session.max_allowed_packet 明显小于全局值(比如全局是 512M,会话只有 4M),说明问题不在 MySQL 配置本身,而在连接建立环节。
同步调整服务端与 PHP 层的 packet 限制
phpMyAdmin 走的是 PHP + MySQLi/PDO 链路,有三层缓冲:MySQL 服务端、PHP 的 mysqli 扩展、phpMyAdmin 自身解析逻辑。只改 my.cnf 里的 max_allowed_packet 并重启 mysqld 是不够的。
- 改完
my.cnf后必须重启 MySQL 服务 - PHP 进程也必须重启(比如重启 Apache/Nginx 或 PHP-FPM),否则 mysqli 仍用旧的连接参数通信
- 检查 PHP 是否启用自动重连:
php -r "echo ini_get('mysqli.reconnect');",输出为空或0表示关闭,连接中断后不重试,直接崩 - 若目标 SQL 含 emoji 或四字节 UTF-8,导入命令里要加
--default-character-set=utf8mb4,否则解析中途卡死也可能伪装成 2006
绕过 phpMyAdmin 上传和执行双瓶颈
50MB 以上文件别硬扛 phpMyAdmin。它既受 PHP 的 upload_max_filesize 和 post_max_size 上传限制,又受 max_execution_time 和内存限制,还容易因 BOM、长事务、单条超长 INSERT 等触发 2006。
- 宝塔用户:进「PHP 设置 → 配置修改」,把
upload_max_filesize = 256M、post_max_size = 256M、max_execution_time = 600、memory_limit = 512M全部调高,改完必须「重启 PHP 服务」 - 更推荐命令行导入:
mysql -u root -p your_db_name ,完全跳过 HTTP 上传层 - 导入前确认 SQL 文件无 BOM(用 VS Code 或 Notepad++ 查看编码)、无
CREATE DATABASE或USE语句、且已提前建好目标库
拆分大 SQL 文件时避开语法断裂
不能用 split -l 1000 硬切——CREATE TABLE 和后续 INSERT 可能被劈开,多值 INSERT INTO ... VALUES (),(),() 会被截断,事务边界丢失,导入直接报语法错误。
- 优先用
mysqldump --skip-extended-insert重新导出,让每行INSERT只插一条,方便按行安全切分 - 真要手动拆:先用
sed -n '/^CREATE TABLE/,/^;/p' dump.sql > schema.sql抽结构;再用awk '/^INSERT/ {print > "data_" ++i ".sql"}' dump.sql按INSERT分块(注意确认语句中无嵌套括号) - 每块文件开头加
SET FOREIGN_KEY_CHECKS=0;,结尾加SET FOREIGN_KEY_CHECKS=1;,避免外键冲突
最易被忽略的是:SQL 文件开头的 UTF-8 BOM 字节会让 phpMyAdmin 首行解析失败,报 Unknown command '',后续所有语句错位,最终退化为 2006 —— 这类问题查日志根本看不出 packet 或 timeout 异常,得先验编码。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











