Mysql docker部署8.0升级到8.4

Mysql docker部署8.0升级到8.4


1:背景概述

  • 为修复某客户mysql安全漏洞,小版本更新已经无法修复---> CVE-2024-21176
  • 部署方式: docker单机部署,采用docker-compose启动方式
yaml 复制代码
services:

  mysql:
    image: mysql:8.0.39
    container_name: mysql
    environment:
      - LANG=C.UTF-8
      - TZ=${TIME_ZONE:-Asia/Shanghai}
      - MYSQL_ROOT_PASSWORD=xxxxxxx
    volumes:
      - ./mysql/initdb.d:/docker-entrypoint-initdb.d
      - ./mysql/data:/var/lib/mysql
      - ./mysql/conf/mysql.cnf:/etc/mysql/conf.d/mysql.cnf
    ports:
      - 3306:3306
    restart: always
  • 升级版本:8.0.39 -> 8.4.5
  • 当前配置文件mysql.cnf:
ini 复制代码
[client]
port                  = 3306
default-character-set = utf8mb4

[mysqld]
user                  = mysql
port                  = 3306
sql_mode              = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

default-storage-engine        = InnoDB
default-authentication-plugin = mysql_native_password
character-set-server          = utf8mb4
collation-server              = utf8mb4_0900_ai_ci
init_connect                  = 'SET NAMES utf8mb4'

skip-character-set-client-handshake
explicit_defaults_for_timestamp

slow_query_log
long_query_time     = 3
slow-query-log-file = /var/lib/mysql/mysql.slow.log
log-error           = /var/lib/mysql/mysql.error.log

default-time-zone = '+8:00'

max_connections         = 1000
innodb_buffer_pool_size = 1G
sort_buffer_size        = 1M
join_buffer_size        = 1M



[mysql]
default-character-set = utf8mb4

升级流程

graph LR 备份 --> 停止旧版mysql -->修改docker-compose.yml镜像tag --> 启动新版mysql

备份

生产环境采用msyqldump方式,测试环境可以停止mysql容器后 直接备份数据目录cp -rf mysql mysql_bak

停止旧版mysql

shell 复制代码
# 在docker-compose.yml文件目录执行
docker-compose down -v

修改镜像tag

mysql:8.0.39 --> mysql:8.4.5

启动新版mysql

shell 复制代码
# 在docker-compose.yml文件目录执行 
docker-compose up -d

启动报错

log 复制代码
2025-06-05T12:36:52.141472Z 0 [ERROR] [MY-000067] [Server] unknown variable 'default-authentication-plugin=mysql_native_password'.
2025-06-05T12:36:52.142300Z 0 [ERROR] [MY-010119] [Server] Aborting
2025-06-05T12:41:31.730861Z 0 [ERROR] [MY-000068] [Server] unknown option '--skip-character-set-client-handshake'.
2025-06-05T12:41:31.731594Z 0 [ERROR] [MY-010119] [Server] Aborting

导致容器无法启动的故障主要是这两条配置

解决方法

修改配置文件:

ini 复制代码
[client]
port                  = 3306
default-character-set = utf8mb4

[mysqld]
user                  = mysql
port                  = 3306
sql_mode              = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

default-storage-engine        = InnoDB
#default-authentication-plugin = mysql_native_password
mysql_native_password = on
character-set-server          = utf8mb4
collation-server              = utf8mb4_0900_ai_ci
init_connect                  = 'SET NAMES utf8mb4'

#skip-character-set-client-handshake
explicit_defaults_for_timestamp

slow_query_log
long_query_time     = 3
slow-query-log-file = /var/lib/mysql/mysql.slow.log
log-error           = /var/lib/mysql/mysql.error.log

default-time-zone = '+8:00'

max_connections         = 1000
innodb_buffer_pool_size = 1G
sort_buffer_size        = 1M
join_buffer_size        = 1M



[mysql]
default-character-set = utf8mb4

注释: default-authentication-plugin = mysql_native_password skip-character-set-client-handshake

新增: mysql_native_password = on

修改完后即可重新启动了

总结

  1. mysql可以从8.0直接升级到8.4,(但5.7是不可以直接升级8.4的)
  2. 只需修改弃用的某些参数即可启动成功,参考链接:dev.mysql.com/doc/refman/...
  3. nacos2.2版本支持mysql8.4.5!!!
相关推荐
TDengine (老段)21 小时前
TDengine Python 连接器进阶指南
大数据·数据库·python·物联网·时序数据库·tdengine·涛思数据
赵渝强老师21 小时前
【赵渝强老师】OceanBase的配置文件与配置项
数据库·oceanbase
玖日大大1 天前
OceanBase SeekDB:AI 原生数据库的技术革命与实践指南
数据库·人工智能·oceanbase
高溪流1 天前
3.数据库表的基本操作
数据库·mysql
alonewolf_991 天前
深入剖析MySQL锁机制与MVCC原理:高并发场景下的数据库核心优化
数据库·mysql
一 乐1 天前
绿色农产品销售|基于springboot + vue绿色农产品销售系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·后端·宠物
Codeking__1 天前
Redis初识——什么是Redis
数据库·redis·mybatis
k***1951 天前
Spring 核心技术解析【纯干货版】- Ⅶ:Spring 切面编程模块 Spring-Instrument 模块精讲
前端·数据库·spring
程序员黄老师1 天前
主流向量数据库全面解析
数据库·大模型·向量·rag
Full Stack Developme1 天前
Redis 可以实现哪些业务功能
数据库·redis·缓存