
前言:
使用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 部署简单可控
✔ 避开旧版本配置是关键
✔ 本文方案可直接用于生产