mysql max_allowed_packet 设置

当MySQL遇到超过1M的大数据插入或更新时会报错。本文介绍了解决该问题的方法,通过调整max_allowed_packet参数来允许更大的数据包,确保顺利进行大数据操作。
 mysql5数据,插入或更新字段有大数据时(大于1M),会出现如下错误:
SEVERE: Servlet.service() for servlet [webs] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.TransientDataAccessResourceException: Hibernate flushing: Could not execute JDBC batch update; SQL [update t_article set (省略部分...)author_id=? where id=?]; Packet for query is too large (1117260 > 1048576). You can change this value on the server by setting the max_allowed_packet' variable.; nested exception is java.sql.BatchUpdateException: Packet for query is too large (1117260 > 1048576). You can change this value on the server by setting the max_allowed_packet' variable.] with root cause java.sql.BatchUpdateException: Packet for query is too large (1117260 > 1048576). You can change this value on the server by setting the max_allowed_packet' variable.

开始以为是相应字段的类型设置不正确,超出了字段的最大范围,网上查询后发现是mysql默认加载的数据文件不超过1M,可以通过更改mysql的配置文件my.cnf(Linux,或windows的my.ini)来更改这一默认值,从而达到插入大数据的目的。


解决:
MySQL的一个系统参数:max_allowed_packet,其默认值为1048576(1M),
可以先查询一下:show VARIABLES like '%max_allowed_packet%';
修改此变量的值:MySQL安装目录下的my.ini文件中的[mysqld]段中的"max_allowed_packet = 1M",如更改为4M(如果没有这行内容,增加一行),保存,重新启动MySQL服务。现在可以load大于1M的文件了。

有时候命令“SET GLOBAL max_allowed_packet=16*1024*1024”无效,需要使用如下命令:set @@max_allowed_packet=5*1024*1024
### 如何在 Windows 环境下设置 MySQL 的 `max_allowed_packet` 参数 #### 方法一:通过配置文件修改 可以在 MySQL 安装目录下的 `my.ini` 文件中进行配置。如果该文件不存在,则需要手动创建。 1. **定位到 MySQL 安装路径** 找到 MySQL 的安装目录,通常位于 `C:\Program Files\MySQL\MySQL Server X.X` 或其他自定义位置。 2. **编辑或新建 `my.ini` 文件** 如果存在 `my.ini` 文件则直接打开;如果没有,则需手动创建并保存为 `my.ini`。 3. **添加或修改 `[mysqld]` 部分的内容** 在 `[mysqld]` 节点下加入以下内容: ```ini [mysqld] max_allowed_packet = 20M ``` 4. **保存文件并重启 MySQL 服务** 使用管理员权限运行命令提示符,输入以下命令以重启 MySQL 服务: ```cmd net stop mysql net start mysql ``` 完成上述操作后,可以通过查询确认参数是否生效: ```sql SELECT @@max_allowed_packet; ``` 结果显示应为新设定的值(如 `20971520` 表示 20MB)。[^3] --- #### 方法二:动态调整(无需重启) 也可以不更改配置文件而直接通过 SQL 命令临时修改此参数: 1. 登录 MySQL 数据库: ```bash mysql -u root -p ``` 2. 设置全局变量: ```sql SET GLOBAL max_allowed_packet = 100 * 1024 * 1024; ``` 这里将最大允许数据包大小设为了 100 MB。 注意:这种方式仅对当前会话有效,下次启动 MySQL 后仍恢复默认值。因此建议结合方法一长期固定设置。[^1] --- #### 方法三:验证设置效果 无论采用哪种方式,都可以通过以下 SQL 查询来检验实际生效情况: ```sql SELECT @@global.max_allowed_packet AS global_value, @@session.max_allowed_packet AS session_value; ``` 这能分别查看全局和当前会话级别的 `max_allowed_packet` 值。[^2] --- #### 注意事项 - 修改前请备份原始配置文件以防误改影响正常工作。 - 若涉及大容量导入导出场景,请确保客户端连接也支持相应的大数据传输能力,可能还需同步调整 `[client]` 和 `[mysql]` 配置部分的最大包尺寸限制。[^4] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值