max_allowed_packet是MySQL控制单个数据包最大字节数的配置项,影响客户端/服务器通信、BLOB/TEXT操作;默认4MB,范围1KB–1GB;需在[mysqld]段下以64M格式写入my.cnf/my.ini并重启服务才永久生效。
直接改 my.cnf 或 my.ini 才算真正生效
只在 navicat 里执行 set global max_allowed_packet 是临时的,mysql 服务重启后就失效;很多情况下你改完没重启服务,或者 navicat 连接用的是另一个 mysql 实例(比如 docker 容器、本地 homebrew 安装、或云数据库),配置根本没打到目标上。必须定位到真实运行的 mysql 配置文件并修改。
怎么找到正确的配置文件位置
不同环境路径差异大,不能硬背:
- Linux(systemd 管理):
/etc/my.cnf或/etc/mysql/my.cnf,优先检查/etc/mysql/mysql.conf.d/mysqld.cnf - macOS(Homebrew):
/opt/homebrew/etc/my.cnf(Apple Silicon)或/usr/local/etc/my.cnf - Windows:
C:\ProgramData\MySQL\MySQL Server X.X\my.ini(注意是 ProgramData,不是 Program Files,且隐藏) - Docker:
docker exec -it mysql_container cat /etc/my.cnf查看挂载路径,或进容器改/etc/mysql/my.cnf
不确定时,在 MySQL 中执行:SHOW VARIABLES LIKE 'config_file'; —— 这个命令返回的才是当前实际加载的配置文件路径。
max_allowed_packet 要写对格式和单位
常见错误是写成 max_allowed_packet = 20M 却没加单位后缀,或写成 20MB(MySQL 不认 B);也有人误写成 max_allowed_packet = 20 * 1024 * 1024 放在配置文件里——这在 SQL 里合法,但在 my.cnf 里会直接导致 MySQL 启动失败。
面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
- ✅ 正确写法(推荐):
max_allowed_packet = 64M - ✅ 也可用字节:
max_allowed_packet = 67108864 - ❌ 错误写法:
max_allowed_packet = 20MB、max_allowed_packet = 20 * 1024 * 1024、max_allowed_packet = 20m(大小写敏感,必须大写 M)
该参数必须放在 [mysqld] 段下,不能写在 [client] 或文件开头无段落处。
改完不重启 = 白改
配置文件修改后,MySQL 不会自动重载 max_allowed_packet —— 它属于「只能启动时加载」的参数,SET GLOBAL 可以改,但配置文件改了必须重启服务才覆盖之前的值。
- Linux(systemd):
sudo systemctl restart mysqld或sudo systemctl restart mysql(看服务名) - macOS(Homebrew):
brew services restart mysql - Windows:在「服务」管理器中重启
MySQLXX服务,或命令行:net stop MySQL80 && net start MySQL80 - 确认是否生效:
mysql -u root -p -e "SHOW VARIABLES LIKE 'max_allowed_packet';"
最容易被忽略的一点:Navicat 连接池可能缓存旧连接,改完配置并重启 MySQL 后,要关闭并重新打开 Navicat 的连接,否则仍可能报错。

















