错误实为MySQL的max_allowed_packet限制所致,需同步调大服务端与客户端该参数并重启服务,或改用命令行导入绕过phpMyAdmin限制。
phpMyAdmin报“行大小超限”其实是MySQL在拦路
这个错误不是 phpmyadmin 自己报的,而是它把 sql 语句发给 mysql 执行时,mysql 返回的 er_net_packet_too_large(错误号 1153)或类似提示,比如:packets larger than max_allowed_packet are not allowed。phpmyadmin 只是把错误原样转达给你——真正卡住的是 mysql 的 max_allowed_packet 配置。
为什么改了 PHP 的 upload_max_filesize 还不行?
因为这是两级限制:PHP 负责“把文件传进来”,MySQL 负责“把里面的 SQL 执行掉”。哪怕你把 upload_max_filesize 改到 1G,只要一条 INSERT 包含上万字段、或一个 TEXT 字段塞了几 MB 数据,MySQL 在解析那条语句时就会触发 max_allowed_packet 限制。
-
max_allowed_packet默认通常只有 4M(MySQL 5.7)或 64M(8.0+),远低于你设的 PHP 上传上限 - 它控制的是“单个网络包”的最大尺寸,不是整个文件,所以和文件大小无关,和单条语句/单个字段长度强相关
- 这个值必须在 MySQL 服务端配置(
my.cnf或my.ini),改完要重启 MySQL,仅重载配置不生效 - 部分托管环境(如共享主机)不允许用户修改该参数,此时只能分拆 SQL 或换命令行导入
怎么确认是不是这个原因?
直接看 MySQL 错误日志,或在 phpMyAdmin 导入失败后点“显示详细错误信息”,如果出现以下关键词之一,基本就是它:
Got a packet bigger than 'max_allowed_packet' bytes-
MySQL server has gone away(常伴随 packet 超限引发的连接中断) ER_NET_PACKET_TOO_LARGE
验证方式:登录 MySQL 命令行,执行 SHOW VARIABLES LIKE 'max_allowed_packet';,对比你的 SQL 中最长的一行(比如含大 JSON 或 Base64 的 INSERT)估算字节数。
绕过它的最可靠方式是跳过 phpMyAdmin
命令行 mysql 客户端默认使用更大的 packet 缓冲,并且支持流式读取,不会把整条语句一次性加载进内存再发。尤其当 SQL 文件里有 LOAD DATA INFILE 或超长 BLOB 字段时,这招几乎是唯一解。
立即学习“PHP免费学习笔记(深入)”;
- 先确保 MySQL 服务已运行,SQL 文件已上传到服务器(如
/www/backup/data.sql) - 执行:
/www/server/mysql/bin/mysql -u root -p --max-allowed-packet=512M your_db_name - 注意:这里加了
--max-allowed-packet=512M是客户端参数,只影响本次连接,不需改服务端配置 - 如果文件含
CREATE DATABASE或USE,建议先手动建库并选中,再用导入,避免权限或上下文问题
真正容易被忽略的是:即使服务端 max_allowed_packet 已调大,phpMyAdmin 内部仍可能因 PHP 内存限制或脚本超时,在解析阶段就崩溃——所以但凡看到“行大小”类报错,优先走命令行,别在界面里反复调参。



















