在 MySQL 中,上传文件(如通过 LOAD DATA INFILE 或导入 SQL 文件)受到多个配置参数的限制。如果你遇到“最大上传 50M”的限制,通常是因为以下几个配置项的默认值限制了上传大小:
主要相关参数:
-
max_allowed_packet
控制 MySQL 服务器接收或发送的最大数据包大小。这是影响导入大文件的最主要参数。 -
innodb_log_file_size(间接影响)
如果你使用 InnoDB 存储引擎,较大的事务可能受此参数影响。 -
客户端或工具限制(如 phpMyAdmin、MySQL Workbench)
有时限制不是来自 MySQL 本身,而是前端工具(例如 phpMyAdmin 的upload_max_filesize和post_max_size)。
✅ 修改步骤
1. 修改 MySQL 配置文件(my.cnf 或 my.ini)
找到 MySQL 的配置文件:
- Linux/macOS:
/etc/mysql/my.cnf或/etc/my.cnf或/usr/local/mysql/my.cnf - Windows:
my.ini(通常在 MySQL 安装目录下)
在 [mysqld] 段中添加或修改以下参数:
[mysqld]
max_allowed_packet = 100M
你可以根据需要设置为
64M、100M、256M等,最大支持 1GB(1073741824 字节)。⚠️ 注意:
max_allowed_packet最大值不能超过 1GB。
2. 如果使用 LOAD DATA INFILE,确保没有其他限制
无需额外设置,只要 max_allowed_packet 足够大即可。
3. 重启 MySQL 服务
修改配置后必须重启服务才能生效。
-
Linux(systemd):
sudo systemctl restart mysql或
sudo service mysql restart -
macOS(Homebrew 安装):
brew services restart mysql -
Windows:
在服务管理器中重启 MySQL 服务,或运行:net stop mysql net start mysql
4. 验证修改是否生效
登录 MySQL,执行:
SHOW VARIABLES LIKE 'max_allowed_packet';
你应该看到类似:
+--------------------+----------+
| Variable_name | Value |
+--------------------+----------+
| max_allowed_packet | 104857600|
+--------------------+----------+
(104857600 字节 = 100MB)
⚠️ 注意:如果是通过 phpMyAdmin 上传
phpMyAdmin 的上传限制是由 PHP 配置决定的,与 MySQL 无关:
修改 php.ini 文件中的以下参数:
upload_max_filesize = 100M
post_max_size = 100M
然后重启 Web 服务器(如 Apache 或 Nginx)。
✅ 总结
| 问题来源 | 解决方案 |
|---|---|
| MySQL 导入限制 | 修改 max_allowed_packet |
| phpMyAdmin 限制 | 修改 upload_max_filesize 和 post_max_size |
| 命令行导入限制 | 只需修改 MySQL 的 max_allowed_packet |
示例:导入大 SQL 文件(命令行)
mysql -u username -p --max_allowed_packet=100M database_name < large_file.sql
即使配置文件已设置,命令行导入时也可以显式指定
--max_allowed_packet。
如有其他环境(如 Docker、云数据库 RDS),请说明,配置方式可能不同。
CLOUD技术博