记录一次docker容器内修改my.cnf配置文件max_allowed_packet参数的过程
2024-08-31 19:46:03
1. 问题背景
在一次新版本功能开发完毕,配合测试的过程中,测试反馈某个XxlJob定时任务一直执行失败,在分析了日志之后,找到了报错的原因:
Packet for query is too large (7251422 > 4194304). You can change this value
是因为在程序中做了批量INSERT,而一次插入的数据量太大,超过了MySQL服务器的配置,导致插入失败。所以,我们只需要将这个配置改大一点就行。
2. 解决方案确定
经过搜索,发现决定单次插入数据量的配置是配置文件中的max_allowed_packet
字段,我们使用的MySQL服务是用docker容器启动的。所以配置文件的位置为/etc/mysql/my.cnf
。
首先,查看当前的配置,可以使用SQL查询得知。
show VARIABLES like '%max_allowed_packet%';
查询结果max_allowed_packet=4194304,即:4M。
进入docker容器内查看配置文件,发现配置文件内没有什么配置。
-- 查看所有的docker容器
docker ps -a
-- 进入容器
docker exec -it 容器名or容器ID bash
-- 进入文件目录
cd /etc/mysql
-- 安装vim(有的话不用安装)
apt-get update
apt-get install vim
-- 修改配置为1G
[mysqld]
max_allowed_packet=1073741824
-- 重启MySQL服务(先退出来到linux)
docker restart 容器名or容器ID
3. 小插曲
最开始,使用的设置临时参数,但是没有起作用。
set global max_allowed_packet = 2*1024*1024*10
在首次修改配置文件的时候,没有加[mysqld]
这个分组,导致mysql重启失败,然后也没法进入容器了,只能采用把容器内的配置文件复制出来,修改完再覆盖回去的方法来修改配置。
-- 复制出来
docker cp 容器名or容器ID:/etc/mysql/my.cnf /home/my.cnf
-- 覆盖回去
docker cp /home/my.cnf 容器名or容器ID:/etc/mysql/my.cnf
这里有点奇怪,从容器中复制my.cnf出来显示没有这个文件,然后,用mysql.cnf是可以的,但其实复制的是my.cnf。
另外,查看docker启动日志可以使用
docker -f logs
最新文章
- 使用Word发布文章到 WordPress 博客
- Mac 识别NTFS移动硬盘
- 用c#操作Mongodb(附demo)
- web前段 弹出小例子
- Omnet++ 4.0 入门实例教程
- IE和主流浏览器
- 【转】FTP自动上传文件的perl脚本以及配置文件
- java编程小技巧
- Merge k Sorted Lists 解答
- 【Tesseract-OCR】在VS2012环境下调用API方法---注意避免名字冲突
- 一张漫画说尽IT开发过程
- 节点操作,节点属性的操作及DOM event事件
- 使用Java代码发送邮件
- ubuntu server 14.04 上安装jdk1.8
- java 使用CRF遇到的问题汇总
- jvm理论-字节码指令
- 【hadoop】 hdfs shell 命令交互
- 大型网站系统与Java中间件实践读书笔记
- js获取当前日期,并计算几天后日期
- 蓝桥杯 - G将军有一支训练有素的军队 - [树形DP]