前言:
使用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正常运行
三、目录结构设计(推荐)
mysql8.4/ ├── docker-compose.yml ├── data/ # 数据目录 ├── log/ # 日志目录 └── conf/ └── my.cnf创建目录:
mkdir-p mysql8.4/{data,log,conf}cdmysql8.4如果希望自定义docker网络的话,可以运行:
docker network create sql_default计划使用默认的话,就删除下面内容中的关于networks配置的即可:
networks:-sql_default networks:sql_default:external:true四、docker-compose.yml(MySQL 8.4 推荐版)
services:mysql:image:mysql:8.4.5container_name:mysql84restart:alwaysports:-"3306:3306"environment:TZ:Asia/ShanghaiMYSQL_ROOT_PASSWORD:admin123456volumes:-./data:/var/lib/mysql-./log:/var/log/mysql-./conf:/etc/mysql/conf.d-/etc/localtime:/etc/localtime:rocommand:["--character-set-server=utf8mb4","--collation-server=utf8mb4_0900_ai_ci"]networks:-sql_defaultnetworks:sql_default:external:true⚠️ 重点说明(8.4 必看)
❌不要再加这个参数:
--default-authentication-plugin=mysql_native_password在MySQL 8.4 中已被移除,会直接导致启动失败:
unknown variable 'default-authentication-plugin'五、MySQL 8.4 专用配置文件(conf/my.cnf)-- 可选,不配置使用默认也可以
[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文件在同一目录
dockercompose up -d首次启动会进行数据库初始化。
七、启动成功的“关键信号”
查看日志:
dockerlogs mysql84出现以下日志,说明初始化与启动全部成功:
MySQL init process done. Ready for start up.这样的日志正是标准成功流程。
八、连接验证
宿主机连接
mysql -h127.0.0.1 -P3306-u root -p容器内连接(推荐)
dockerexec-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 警告
Setting lower_case_table_names=2 because file system is case insensitive说明:
- macOS / Docker Desktop 常见
- Linux 服务器一般不会出现
- 不影响使用
3️⃣ 时区 Warning 是否影响?
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 部署简单可控
✔ 避开旧版本配置是关键
✔ 本文方案可直接用于生产