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!!!
相关推荐
钊兵2 小时前
mysql时间处理函数和操作笔记
数据库·笔记·mysql
掘根2 小时前
【MySQL数据库备份与恢复1】二进制日志,mysqlbinlog
数据库·mysql
编程爱好者熊浪3 小时前
Navicat 远程连接SQLlite数据库
数据库
保护我方hair5 小时前
行业分类表sql
数据库·sql
烙印6015 小时前
MySQL的底层原理--InnoDB记录存储结构
数据库·mysql
范纹杉想快点毕业6 小时前
基于C语言的Zynq SOC FPGA嵌入式裸机设计和开发教程
c语言·开发语言·数据库·嵌入式硬件·qt·fpga开发·嵌入式实时数据库
我命由我123459 小时前
PostgreSQL 保留关键字冲突问题:语法错误 在 “user“ 或附近的 LINE 1: CREATE TABLE user
数据库·后端·sql·mysql·postgresql·问题·数据库系统
书唐瑞9 小时前
Percona pt-archiver 出现长事务
java·服务器·数据库
!chen9 小时前
Linux dd命令 数据备份、转换与磁盘操作的终极工具
linux·数据库·tomcat
Fireworkitte10 小时前
MongoDB的操作
数据库·mongodb