跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

XAMPP修改MySQL数据包最大限制 XAMPP max_allowed_packet

直接执行SELECT @@global.max_allowed_packet, @@session.max_allowed_packet;可同时查看全局与会话级值,避免仅用SHOW VARIABLES LIKE '%max_allowed_packet%'导致误判;XAMPP需在C:\xampp\mysql\bin\my.ini的[mysqld]、[client]、[mysqldump]三处均设置max_allowed_packet = 64M并彻底重启MySQL服务。 怎么查当前
max_allowed_packet
值 直接连进 MySQL 命令行,执行:
SELECT @@global.max_allowed_packet, @@session.max_allowed_packet;
别只看
SHOW VARIABLES LIKE '%max_allowed_packet%'
——它只显示会话级值,容易误判。两个值都要对得上:如果
@@global
是 4194304(4MB),但
@@session
是 1048576(1MB),说明客户端启动时被压低了,光改服务端没用。 Windows 下 XAMPP 的
my.ini
改哪几处 XAMPP 的 MySQL 配置文件是
C:\xampp\mysql\bin\my.ini
(不是
etc
目录下的)。必须同时改两段:
[mysqld]
段加:
max_allowed_packet = 64M
(这是服务端硬上限)
[client]
段加:
max_allowed_packet = 64M
(否则
mysql
命令行、Navicat、SQLyog 等工具仍按默认 16MB 走) 别漏掉
[mysqldump]
段(如果要用
mysqldump
导出大库):
max_allowed_packet = 64M
改完保存,**必须重启 XAMPP 控制面板里的 MySQL 服务**,仅“停止再启动”不够,要确保进程完全退出再拉起。 用
mysql
命令行导入大 SQL 文件还报错? 即使
my.ini
改对了、服务也重启了,
mysql -u root -p db_name 仍可能失败。因为命令行客户端有自己的缓冲区,默认不读 [client]
段(尤其新版 XAMPP 自带的 MySQL 客户端)。解决方法只有两个: MySQL(Linux) MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。 下载 显式传参:
mysql --max-allowed-packet=64M -u root -p db_name
或改用交互式导入:先
mysql -u root -p
进去,再执行
SET SESSION max_allowed_packet = 67108864;
,然后
source dump.sql
注意:
SET GLOBAL
对已建立连接无效,且 XAMPP 默认权限下普通用户执行会报
Access denied
。 设成多大才不翻车 别一上来就写
1G
。XAMPP 通常跑在开发机上,内存有限,设太大容易触发 OOM 杀进程。实际建议: 纯文本 SQL 导入(如 Confluence dump):32M~64M 足够 含 Base64 图片字段的 INSERT:按最长单条记录预估 + 20%,比如最长一条 12MB,设 16M 即可 值必须是 1024 的整数倍,单位后缀(
M
/
G
)要大写,
64m
会被忽略 改完立刻验证:
SELECT @@global.max_allowed_packet;
看是否真加载成功,别信配置文件写了就生效 最常被忽略的一点:某些 PHP 应用(比如旧版 WordPress 插件或自定义脚本)会在 PDO 连接串里硬编码
maxAllowedPacket
,这时服务端调再大也没用——得去代码里搜
maxAllowedPacket
mysqli_options

相关文章