記錄一次docker容器內修改my.cnf配置文件max_allowed_packet參數的過程


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM