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!!!
相关推荐
IvorySQL14 分钟前
PostgreSQL 分区表的 ALTER TABLE 语句执行机制解析
数据库·postgresql·开源
·云扬·23 分钟前
MySQL 8.0 Redo Log 归档与禁用实战指南
android·数据库·mysql
IT邦德26 分钟前
Oracle 26ai DataGuard 搭建(RAC到单机)
数据库·oracle
惊讶的猫1 小时前
redis分片集群
数据库·redis·缓存·分片集群·海量数据存储·高并发写
不爱缺氧i1 小时前
完全卸载MariaDB
数据库·mariadb
纤纡.1 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql
jiunian_cn1 小时前
【Redis】渐进式遍历
数据库·redis·缓存
橙露2 小时前
Spring Boot 核心原理:自动配置机制与自定义 Starter 开发
java·数据库·spring boot
冰暮流星2 小时前
sql语言之分组语句group by
java·数据库·sql
符哥20082 小时前
Ubuntu 常用指令集大全(附实操实例)
数据库·ubuntu·postgresql