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 部署简单可控

✔ 避开旧版本配置是关键

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


相关推荐
爱学习的阿磊3 小时前
使用Fabric自动化你的部署流程
jvm·数据库·python
枷锁—sha3 小时前
【SRC】SQL注入快速判定与应对策略(一)
网络·数据库·sql·安全·网络安全·系统安全
惜分飞3 小时前
ORA-600 kcratr_nab_less_than_odr和ORA-600 4193故障处理--惜分飞
数据库·oracle
chian-ocean3 小时前
CANN 生态进阶:利用 `profiling-tools` 优化模型性能
数据库·mysql
m0_550024634 小时前
持续集成/持续部署(CI/CD) for Python
jvm·数据库·python
AC赳赳老秦4 小时前
代码生成超越 GPT-4:DeepSeek-V4 编程任务实战与 2026 开发者效率提升指南
数据库·数据仓库·人工智能·科技·rabbitmq·memcache·deepseek
人鱼传说4 小时前
docker desktop是一个好东西
运维·docker·容器
啦啦啦_99994 小时前
Redis-2-queryFormat()方法
数据库·redis·缓存
玄同7655 小时前
SQLite + LLM:大模型应用落地的轻量级数据存储方案
jvm·数据库·人工智能·python·语言模型·sqlite·知识图谱
吾日三省吾码5 小时前
别只会“加索引”了!这 3 个 PostgreSQL 反常识优化,能把性能和成本一起打下来
数据库·postgresql