直接修改 max_allowed_packet 可解决报错,需确保改对配置位置、单位并重启服务;报错信息含“1153 - got a packet bigger than 'max_allowed_packet' bytes”即确认为此问题,常见于 navicat 导入大 sql 文件时单包超限。
直接改 max_allowed_packet 就能解决,但必须改对位置、单位和重启方式,否则无效。
确认报错确实是 max_allowed_packet 限制导致
报错信息里明确出现 1153 - Got a packet bigger than 'max_allowed_packet' bytes,说明不是网络中断、权限不足或字符集问题,而是 MySQL 服务端拒绝接收超过阈值的单个数据包。Navicat 导入时会把整个 SQL 文件(尤其是含大量 INSERT 的 dump)拼成一个大包发过去,默认上限是 4M 或 16M,远小于实际文件体积(比如 200MB 的 .sql 文件)。
- 不要只看文件大小——关键看单条语句或事务块是否超出限制,例如含超长 BLOB 字段或 mega-sized INSERT … VALUES(...) 语句
- 用命令行验证:执行
mysql --max-allowed-packet=512M -hxxx -uxxx -p ,如果成功,就坐实是 Navicat 连接会话未继承服务端配置 - 查当前值:
SHOW GLOBAL VARIABLES LIKE 'max_allowed_packet';,返回值单位是字节,16777216= 16M
永久修改:编辑 my.cnf 或 my.ini 并重启 MySQL
这是最稳妥的解法,适用于所有客户端(包括 Navicat、命令行、应用连接)。注意配置文件路径和 section 名称因系统而异:
- Linux/macOS 通常在
/etc/my.cnf或/etc/mysql/my.cnf;Windows 多为C:\ProgramData\MySQL\MySQL Server X.X\my.ini或安装目录下的my.ini - 必须加在
[mysqld]段下(不是[client]或[mysql]),否则服务启动时不读取 - 写法要带单位:支持
M(兆字节)、G(吉字节),如max_allowed_packet=512M;不写单位会被当作字节,512就是 512 字节,反而更糟 - 改完保存,用
service mysqld restart(CentOS/RHEL)或sudo systemctl restart mysql(Ubuntu/Debian)或 Windows 服务管理器重启 MySQL 服务 - 重启后务必再执行
SHOW GLOBAL VARIABLES LIKE 'max_allowed_packet';确认生效
临时绕过:Navicat 自身设置 + 会话级调整
如果你没权限改 MySQL 配置,或只是临时导入一次,可以组合使用两种方式:
- Navicat 导入时取消勾选「执行所有查询」和「忽略错误继续执行」——这两个选项会让它尝试把整个文件当单个事务提交,加剧包超限;改为分批导入(勾选「每 N 行作为一个语句」,N 设为 1000~5000)
- 先连上数据库,在 Navicat 查询窗口执行:
SET SESSION max_allowed_packet = 536870912;(即 512MB),再运行导入操作——但该设置仅对当前连接有效,且不能超过服务端全局上限 - 若服务端
max_allowed_packet是 64M,你设 512M 会静默失败,所以必须先确保全局值足够大
云数据库(阿里云 RDS / 腾讯云 CDB)怎么办
你不能直接编辑云厂商的 my.cnf,但几乎所有云 MySQL 实例都提供「参数模板」或「参数组」管理界面:
- 进入控制台 → 找到目标实例 →「参数设置」→ 搜索
max_allowed_packet→ 修改为所需值(如536870912或512M)→ 保存并**重启实例**(注意:云上重启是分钟级停机,提前安排) - 部分厂商(如阿里云)允许热修改某些参数,但
max_allowed_packet属于需重启项,别信“立即生效”提示 - 导入前检查白名单、用户权限(
GRANT INSERT, CREATE ON db.* TO 'user'@'%')和字符集(utf8mb4优先),这些失败也会表现为中途卡住或报其他错,容易误判为 1153
真正容易被忽略的是:Navicat 导入大 .sql 文件时,即使服务端配置正确,它仍可能因自身内存限制或 TCP 超时断开。如果改完 max_allowed_packet 还失败,换 mysql 命令行导入更可靠——它不经过 GUI 层,也不受 Navicat 内存模型拖累。











