mysql中,由于JDBC连接限制了最大包长度1024B,即1KB,报错“max_allowed_packet' ”

本文详细解析了在使用Spring框架进行大文件上传时遇到的MySQL数据库限制问题。主要介绍了如何通过调整数据库配置来增大允许的数据包大小,包括临时设置和永久修改配置文件的方法。
部署运行你感兴趣的模型镜像

  报错:org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback; SQL [INSERT INTO SYS_UPLOAD_FILE(juid,filename,fileio,intime) VALUES(?,?,?,sysdate())]; Packet for query is too large (19469578 > 1048576). You can change this value on the server by setting the max_allowed_packet' variable.; nested exception is com.mysql.jdbc.PacketTooBigException: Packet for query is too large (19469578 > 1048576). You can change this value on the server by setting the max_allowed_packet' variable.

  主要是mysql的JDBC连接限制了最大包长度1024B,即1KB。

  果断去数据库里面查询当前数据库的包长度显示:show VARIABLES like '%max_allowed_packet%';  

  可使用两种方法修改此参数

  1、连接数据库服务器,登录 mysql, 执行命令set global max_allowed_packet = 2*1024*10并执行。退出后,重新登录 mysql ,再次查看这个系统项的值, 注意,必须重新登录mysql,否则这个值还是显示为原始值(缓存)!

  注意:此种方式,每次电脑重启都会讲数据库缓存初始化,也就是需要重新设置max_allowed_packet值。

  2、还有种方法可使用。修改mysql.cnf(windowsmy.ini),在[mysqld]段或者mysql的server配置段进行修改。

    max_allowed_packet = 20K

  此方法需要重启mysql才行。

配置部分截取:

# SERVER SECTION
# ----------------------------------------------------------------------
#
# The following options will be read by the MySQL Server. Make sure that
# you have installed the server correctly (see above) so it reads this 
# file.
#
[mysqld]
max_allowed_packet = 20M
# The TCP/IP Port the MySQL Server will listen on
port=3306

 

转载于:https://www.cnblogs.com/lojun/p/7128197.html

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

### 设置 MySQL 的 `max_allowed_packet` 参数 MySQL 的 `max_allowed_packet` 参数用于控制客户端与服务端之间传输数据最大大小。默认值通常为 1MB(即 1048576 字节),但根据实际需求,可以调整此值以支持更大的数据操作,例如导入大文件或执行大数据量的查询。 #### 1. **临时设置(通过 SQL 命令)** 可以通过 MySQLSQL 命令临时修改 `max_allowed_packet` 的值。该设置在 MySQL 重启后会失效,仅在当前运行期间生效。 - **设置全局变量值:** ```sql SET GLOBAL max_allowed_packet = 100 * 1024 * 1024; -- 设置为 100MB ``` - **验证当前设置值:** ```sql SELECT @@max_allowed_packet; ``` 查询结果将显示当前的 `max_allowed_packet` 值,例如 `104857600`(表示 100MB)[^1]。 #### 2. **永久设置(修改 MySQL 配置文件)** 要使 `max_allowed_packet` 的设置在 MySQL 重启后仍然有效,需要修改 MySQL 的配置文件 `my.cnf` 或 `my.ini`。 - **编辑配置文件:** 打开 MySQL 的配置文件,通常位于 `/etc/my.cnf` 或 `/etc/mysql/my.cnf`,在 `[mysqld]` 部分添加或修改以下行: ```ini [mysqld] max_allowed_packet=100M ``` 上述配置将最大允许的数据大小设置为 100MB。 - **重启 MySQL 服务:** 修改完成后,需要重启 MySQL 服务以使配置生效: ```bash sudo systemctl restart mysqld ``` 如果使用的是较旧的系统,可以使用以下命令: ```bash sudo service mysqld restart ``` 修改后,再次通过 SQL 查询验证配置是否生效: ```sql SELECT @@max_allowed_packet; ``` 查询结果应显示为 `104857600`(即 100MB)[^1]。 #### 3. **注意事项** - **内存限制:** 修改 `max_allowed_packet` 时,需确保系统内存足够支持更大的数据处理。过大的值可能导致内存不足或性能下降。 - **客户端限制:** 某些客户端库(如 JDBC)可能有自己的限制,即使 MySQL 服务端允许更大的数据,客户端也可能需要相应调整配置。 - **配置文件路径:** 如果找不到 `my.cnf` 文件,可以尝试从 MySQL 安装目录中查找模板文件(如 `/usr/share/mysql/my.cnf` 或 `/usr/share/mysql/my-small.cnf`),并将其复制到 `/etc/` 目录下[^3]。 #### 4. **常见问题** 如果未正确设置 `max_allowed_packet`,可能会遇到类似以下错误: > `Packet for query is too large (2084 > 1024). You can change this value on the server by setting the max_allowed_packet variable.` 该错误表明当前查询的数据大小超过了 MySQL限制,需要增加 `max_allowed_packet` 的值[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值