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!!!
相关推荐
Nturmoils9 小时前
订单列表慢查询,先看 WHERE、ORDER BY 和 LIMIT
数据库
渣波13 小时前
拒绝 SQL 焦虑!手把手带你用 NestJS + Prisma + DTO 写出“防弹”级后端代码
javascript·数据库·后端
倔强的石头_2 天前
KingbaseES 新版MySQL 兼容版体验:旧版迁移 + 功能实测
数据库
倔强的石头_4 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库
冬奇Lab5 天前
每日一个开源项目(第134篇):Zvec - 阿里开源的嵌入式向量数据库,向量搜索界的 SQLite
数据库·人工智能·llm
ClouGence5 天前
Oracle CDC 架构优化:从主库直连到 DataGuard 备库同步
数据库·后端·oracle
无响应de神6 天前
三、用户与权限管理
数据库·mysql
麦聪聊数据6 天前
数据服务化时代:企业数据能力输出的核心路径
数据库
shushangyun_6 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
DARLING Zero two♡6 天前
【MySQL数据库】数据类型与表约束
数据库·mysql