Docker Compose 部署 MySQL 8.4 LTS(生产级实践方案)

前言:

使用docker compose 详细部署mysql8.4版本数据库详细步骤
环境:Linux Server / macOS(ARM)

MySQL 版本:8.4.5(LTS)

部署方式:Docker Compose

适用场景:新项目 / 长期维护系统 / ARM & x86 环境


一、为什么选择 MySQL 8.4 LTS?

MySQL 8.4 是 官方长期支持版本(LTS),相比 8.0.x 的创新版本:

  • ✅ 更稳定,维护周期更长
  • ✅ 官方明确推荐用于生产
  • ✅ 原生支持 ARM(Apple Silicon / 云 ARM 实例)
  • ✅ 新项目首选版本

⚠️ 注意:

MySQL 8.4 已经移除了部分 8.0 早期参数,直接照抄旧配置很容易启动失败(本文重点避坑)。


二、本次部署目标

  • 使用 Docker Compose 部署 MySQL 8.4.5
  • 目录使用 相对路径 ./ 挂载
  • 数据 / 日志 / 配置完全持久化
  • 避开 MySQL 8.4 的常见启动坑
  • 可在 Linux / macOS ARM 正常运行

三、目录结构设计(推荐)

text 复制代码
mysql8.4/
├── docker-compose.yml
├── data/            # 数据目录
├── log/             # 日志目录
└── conf/
    └── my.cnf

创建目录:

bash 复制代码
mkdir -p mysql8.4/{data,log,conf}
cd mysql8.4

如果希望自定义docker网络的话,可以运行:

go 复制代码
docker network create sql_default

计划使用默认的话,就删除下面内容中的关于networks配置的即可:

go 复制代码
networks:
      - sql_default

networks:
  sql_default:
    external: true

四、docker-compose.yml(MySQL 8.4 推荐版)

yaml 复制代码
services:
  mysql:
    image: mysql:8.4.5
    container_name: mysql84
    restart: always
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: admin123456
    volumes:
      - ./data:/var/lib/mysql
      - ./log:/var/log/mysql
      - ./conf:/etc/mysql/conf.d
      - /etc/localtime:/etc/localtime:ro
    command:
      [
        "--character-set-server=utf8mb4",
        "--collation-server=utf8mb4_0900_ai_ci"
      ]
    networks:
      - sql_default

networks:
  sql_default:
    external: true

⚠️ 重点说明(8.4 必看)

不要再加这个参数:

text 复制代码
--default-authentication-plugin=mysql_native_password

MySQL 8.4 中已被移除,会直接导致启动失败:

text 复制代码
unknown variable 'default-authentication-plugin'

五、MySQL 8.4 专用配置文件(conf/my.cnf)-- 可选,不配置使用默认也可以

ini 复制代码
[mysqld]
port=3306
user=mysql
server-id=1

# 字符集(8.4 默认 utf8mb4)
character-set-server=utf8mb4
collation-server=utf8mb4_0900_ai_ci

# 时区
default-time-zone='+8:00'

# 连接
max_connections=500

# InnoDB
innodb_buffer_pool_size=512M
innodb_log_file_size=256M
innodb_flush_log_at_trx_commit=1
innodb_file_per_table=1

# 日志
log-error=/var/log/mysql/error.log
slow_query_log=1
slow_query_log_file=/var/log/mysql/slow.log
long_query_time=2

# SQL 模式(8.x 推荐)
sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

💡 MySQL 8.4 默认使用 caching_sha2_password,无需手动配置


六、启动 MySQL 8.4 容器

运行命令要跟docker-compose.yml文件在同一目录

bash 复制代码
docker compose up -d  

首次启动会进行数据库初始化。


七、启动成功的"关键信号"

查看日志:

bash 复制代码
docker logs mysql84

出现以下日志,说明 初始化与启动全部成功

text 复制代码
MySQL init process done. Ready for start up.

这样的日志正是标准成功流程


八、连接验证

宿主机连接

bash 复制代码
mysql -h 127.0.0.1 -P 3306 -u root -p

容器内连接(推荐)

bash 复制代码
docker exec -it mysql84 mysql -uroot -p

九、常见问题 & 避坑总结(8.4 特有)

1️⃣ 启动失败:unknown variable

原因:

  • 使用了 8.0 / 5.7 的旧参数
  • 8.4 已移除部分变量

解决:

  • 删除 default-authentication-plugin
  • 只保留 8.4 官方支持参数

2️⃣ lower_case_table_names 警告

text 复制代码
Setting lower_case_table_names=2 because file system is case insensitive

说明:

  • macOS / Docker Desktop 常见
  • Linux 服务器一般不会出现
  • 不影响使用

3️⃣ 时区 Warning 是否影响?

text 复制代码
Unable to load '/usr/share/zoneinfo/...'
  • 仅影响 CONVERT_TZ()
  • 业务无影响
  • 可选择忽略

十、5.7 vs 8.4 LTS 简要对比

对比项 MySQL 5.7 MySQL 8.4 LTS
生命周期 即将 EOL 官方长期支持
ARM 支持
默认认证 mysql_native_password caching_sha2_password
JSON 基础 更强
推荐新项目

十一、总结

✔ MySQL 8.4 是新项目首选

✔ Docker Compose 部署简单可控

✔ 避开旧版本配置是关键

✔ 本文方案可直接用于生产


相关推荐
学嵌入式的小杨同学2 小时前
【嵌入式 C 语言高频考点】周测 + 期中真题解析:从基础语法到编程实战
c语言·数据结构·数据库·vscode·算法·面试
独断万古他化2 小时前
Docker 入门前置:容器虚拟化基础之 cgroups 资源控制与 LXC 容器
linux·docker·容器
_lst_2 小时前
Linux文件系统:EXT系列
数据库
Smile_微笑2 小时前
恢复 MySQL 服务(Docker 环境专用)
mysql·adb·docker
卜锦元2 小时前
Docker Compose 部署 MySQL 5.7(生产级实践方案)
数据库·mysql·adb·docker
PGCCC2 小时前
通知:中国PostgreSQL培训认证 2026年度开班计划
数据库·postgresql
ACMer_CTGU2 小时前
解决报错curl: (35) OpenSSL SSL_connect: 连接被对方重设 in connection to download.docker.com:443
网络协议·docker·ssl
\xin2 小时前
SQL 注入、文件上传绕过、MySQL UDF 提权、SUID 提权、Docker 逃逸,以及 APT 持久化技术渗透测试全流程第二次思路
sql·mysql·docker·容器·渗透测试·json·漏洞
羑悻的小杀马特2 小时前
零成本神器组合:用Docker+Uptime Kuma+cpolar打造永不掉线的远程监控系统!
运维·人工智能·docker·容器