mysql 修改max_allowed_packet_Mysql修改max_allowed_packet参数
問題
在 Java 程序中如果出現(xiàn)如下錯誤:
Caused by: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (2084 > 1024). You can change this value on the server by setting the max_allowed_packet’ variable.
原因是 mysql 會限制 server 接受的數(shù)據(jù)包大小。有時候大的插入和更新超過了 max_allowed_packet 參數(shù)限制,會導(dǎo)致寫入或者更新失敗。于是會出現(xiàn)上面的異常。
解決
首先,查看當(dāng)前的接收數(shù)據(jù)包限制,在 mysql 命令行下:
show variables like '%max_allowed_packet%';
顯示結(jié)果為:1048576(單位為 B),即 1M
那么,怎么修改該參數(shù)呢?有以下幾種方式
1、命令行修改(該方式重啟 Mysql 服務(wù)會失效)
在 Mysql 命令行執(zhí)行:
set global max_allowed_packet = 6*1024*1024
然后退出命令行,再重新進入命令行查看,發(fā)現(xiàn)已經(jīng)變?yōu)?6M 了。
但是此方式重啟 mysql 服務(wù)就會失效。所以我們來看下一種方式。
2、Mysql 配置文件修改
可以編輯 my.cnf(windows 下 my.ini,linux 下一般是/etc/my.cnf)來修改 ,在[mysqld]段或者 mysql 的 server 配置段增加下面配置:
[mysqld]
max_allowed_packet=6M
提示:Linux 下如果找不到 my.cnf,可以通過如下命令查找:
mysql --help | grep my.cn
重啟 mysql 服務(wù)使之生效。
這里我再擴展下,在用 docker 或者 docker-compose 部署 Mysql 的情況下,修改該參數(shù)。
3、Docker 部署下的修改
如果使用 Dockerfile 構(gòu)建 Mysql 鏡像,可以將修改過的配置文件(如:my-lwq.cnf,內(nèi)容如下)掛載到容器內(nèi)。
[mysqld]
max_allowed_packet=6M
!includedir /etc/mysql/conf.d/
通過在 Dockerfile 文件加入下面命令掛載 my-lwq.cnf 文件到容器內(nèi),然后重新構(gòu)建鏡像即可。
COPY ./my-lwq.cnf /etc/mysql/conf.d/
4、docker-compose 部署下的修改
如果是通過 docker-compose 部署的 mysql,修改 max_allowed_packet 參數(shù),一種方式是可以按照 3、Docker 部署下的修改 中的方式,通過 Dockerfile 掛載配置文件到容器,則除上面操作外,在 docker-compose.yaml 下還需指定自定義鏡像構(gòu)建,該部分配置參考如下:
mysql:
image: mysql_v1
build:
context: .
dockerfile: Dockerfile.mysql
另一種方式則是直接在 docker-compose.yaml 指定掛載配置文件,該部分配置參考如下:
mysql:
volumes:
- ./my-lwq.cnf:/etc/mysql/conf.d/my-lwq.cnf
最后運行 docker-compose 即可。
總結(jié)
以上是生活随笔為你收集整理的mysql 修改max_allowed_packet_Mysql修改max_allowed_packet参数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: npm ERR! File exists
- 下一篇: 解决redhat无法连接网络问题