Docker升級MySQL版本的快速方法

济南小老虎發表於2024-05-28

Docker升級MySQL版本的快速方法


背景

雖然容器跑資料庫用於生產不太靠譜
因為效能以及其他相關的問題
但是用在測試環境上面還是非常方便的
昨天有客戶想問問最新版的MySQL的相容性情況
今天告知要驗證一把最新版本的資料庫的情況.
所以這裡驗證一下, 遇到了幾個小坑. 

關於mysql的版本

MySQL現在每個季度釋出一個版本
其中 8.0 系列的後續之進行 bugfixed 不增加新特性
截止 2024.5 最新版本的資料庫是 8.0.37
釋出時間是 2024.4.30
與更新的LTS 8.4 版本是同時釋出的

更舊一點的是 MySQL8.0.36 
其實是 2024.1.16釋出的

升級方式

先獲取映象
docker pull mysql:8.0.36
docker pull mysql:8.0.37
docker pull mysql:8.4

冷備升級

先停掉之前的mysql
docker stop mysql110
然後複製檔案出來. 
比如說我放到了 /mysql3308  

注意一定要處理好 權屬 
chown mysql:mysql /mysql3308 -R

開始映象操作

docker run --user=mysql  --privileged=true \
--name mysql3308 -p 3308:3306 -v /mysql3308/mysql:/var/lib/mysql  \
-v /mysql3308/mysql-files:/var/lib/mysql-files -v /mysql3308/my.cnf:/etc/my.cnf \
-v /mysql3308/log:/var/log  -e MYSQL_ROOT_PASSWORD=Testxxxxxxxx \
-e TZ=Asia/Shanghai -d mysql:8.0.37  --lower-case-table-names=1

需要注意這裡面有幾個深坑
1. Different lower_case_table_names settings for server ('0') and data dictionary ('1')
需要在最後面增加一下:  --lower-case-table-names=1 這個版本啟動總有問題, 尤其是帶著資料庫的情況. 
2.  World-writable my.cnf 
注意 mysql3308 目錄下面不能所有的檔案都是 777 的 會報錯
3. Could not open file '/var/log/mysqld.log' for error logging: Permission denied
可以增加一下: --user=mysql  --privileged=true

升級效果

2024-05-28 15:54:03+08:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.37-1.el9 started.
2024-05-28T07:54:04.100146Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.37) starting as process 1
2024-05-28T07:54:04.106905Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2024-05-28T07:54:07.394466Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2024-05-28T07:54:18.918212Z 4 [System] [MY-013381] [Server] Server upgrade from '80026' to '80037' started.
2024-05-28T07:54:25.744083Z 4 [System] [MY-013381] [Server] Server upgrade from '80026' to '80037' completed.
2024-05-28T07:54:26.603553Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2024-05-28T07:54:26.603589Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2024-05-28T07:54:26.621559Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.37'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MySQL Community Server - GPL.
2024-05-28T07:54:26.621579Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock

相關文章