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!!!
相关推荐
Teable任意门互动9 分钟前
多维表格本地化部署实践解析 企业如何实现数据自主可控路径
数据库·excel·钉钉·飞书·开源软件
You Only Live Once_213 分钟前
SQLite3部署与配置[WIN11]
数据库·sqlite
光泽雨14 分钟前
mysql体系结构
数据库·mysql
云飞云共享云桌面14 分钟前
8-10位研发3D(sw、ug、creo)画图如何共享一台工作站?
运维·服务器·网络·数据库·3d·电脑
TDengine (老段)21 分钟前
TDengine IDMP 事件 —— 事件模板
大数据·数据库·人工智能·时序数据库·tdengine·涛思数据
一只大袋鼠24 分钟前
数据库连接池从入门到精通(下):Druid 连接池使用与工具类封装
java·数据库·连接池
正在走向自律26 分钟前
时序数据库选型指南:在数据洪流中寻找坚实的锚点
数据库·时序数据库·apache iotdb
wljt28 分钟前
达梦数据库恢复数据
数据库·数据库开发
卓怡学长33 分钟前
基于 SpringBoot 的生活信息分享平台,从 0 到 1 完整实现(附源码 + 数据库)
java·数据库·spring boot·tomcat·maven
ID_1800790547334 分钟前
Python解析小红书(XHS)笔记评论 API,json数据返回参考
java·服务器·数据库