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

最新文章

  1. 使用Word发布文章到 WordPress 博客
  2. Mac 识别NTFS移动硬盘
  3. 用c#操作Mongodb(附demo)
  4. web前段 弹出小例子
  5. Omnet++ 4.0 入门实例教程
  6. IE和主流浏览器
  7. 【转】FTP自动上传文件的perl脚本以及配置文件
  8. java编程小技巧
  9. Merge k Sorted Lists 解答
  10. 【Tesseract-OCR】在VS2012环境下调用API方法---注意避免名字冲突
  11. 一张漫画说尽IT开发过程
  12. 节点操作,节点属性的操作及DOM event事件
  13. 使用Java代码发送邮件
  14. ubuntu server 14.04 上安装jdk1.8
  15. java 使用CRF遇到的问题汇总
  16. jvm理论-字节码指令
  17. 【hadoop】 hdfs shell 命令交互
  18. 大型网站系统与Java中间件实践读书笔记
  19. js获取当前日期,并计算几天后日期
  20. 蓝桥杯 - G将军有一支训练有素的军队 - [树形DP]

热门文章

  1. CF 1394 简要题解
  2. kebernet--新手填坑
  3. 关于final关键字
  4. like使用索引如何避免失效
  5. Solution -「洛谷 P5827」点双连通图计数
  6. Nginx安装启用
  7. 力扣算法经典第一题——两数之和(Java两种方式实现)
  8. 记一次慢查询优化sql
  9. 设计模式在实际业务应用中的介绍之3——外观或门面模式Facade对AOP装配业务工厂的应用
  10. Windows原理深入学习系列-强制完整性控制