前言
使用 Docker Compose 详细部署 MySQL 8.4 版本数据库的步骤。
基于 Docker Compose 部署 MySQL 8.4 LTS 数据库的生产级实践方案。涵盖目录结构设计、docker-compose.yml 配置、my.cnf 参数设置及启动验证步骤。重点说明 MySQL 8.4 移除旧版参数的注意事项,如 default-authentication-plugin,并提供常见启动报错解决方案。支持 Linux 与 macOS ARM 环境,确保数据持久化与日志管理。

使用 Docker Compose 详细部署 MySQL 8.4 版本数据库的步骤。
MySQL 8.4 是官方长期支持版本(LTS),相比 8.0.x 的创新版本:
⚠️ 注意: MySQL 8.4 已经移除了部分 8.0 早期参数,直接照抄旧配置很容易启动失败(本文重点避坑)。
./ 挂载mysql8.4/
├── docker-compose.yml
├── data/ # 数据目录
├── log/ # 日志目录
└── conf/
└── my.cnf # 配置文件
创建目录:
mkdir -p mysql8.4/{data,log,conf}
cd mysql8.4
如需自定义 Docker 网络,可运行:
docker network create sql_default
若计划使用默认网络,请删除 docker-compose.yml 中的 networks 配置。
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
❌ 不要再加这个参数:
--default-authentication-plugin=mysql_native_password
在 MySQL 8.4 中已被移除,会直接导致启动失败:
unknown variable 'default-authentication-plugin'
可选,不配置使用默认也可以。
[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,无需手动配置
运行命令要跟
docker-compose.yml文件在同一目录
docker compose up -d
首次启动会进行数据库初始化。
查看日志:
docker logs mysql84
出现以下日志,说明 初始化与启动全部成功:
MySQL init process done. Ready for start up.
这样的日志正是标准成功流程。
mysql -h 127.0.0.1 -P 3306 -u root -p
docker exec -it mysql84 mysql -uroot -p
原因:
解决:
default-authentication-pluginSetting lower_case_table_names=2 because file system is case insensitive
说明:
Unable to load '/usr/share/zoneinfo/...'
CONVERT_TZ()| 对比项 | MySQL 5.7 | MySQL 8.4 LTS |
|---|---|---|
| 生命周期 | 即将 EOL | 官方长期支持 |
| ARM 支持 | ❌ | ✅ |
| 默认认证 | mysql_native_password | caching_sha2_password |
| JSON | 基础 | 更强 |
| 推荐新项目 | ❌ | ✅ |
✔ MySQL 8.4 是新项目首选 ✔ Docker Compose 部署简单可控 ✔ 避开旧版本配置是关键

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
在线格式化和美化您的 SQL 查询(它支持各种 SQL 方言)。 在线工具,SQL 美化和格式化在线工具,online
解析 INSERT 等受限 SQL,导出为 CSV、JSON、XML、YAML、HTML 表格(见页内语法说明)。 在线工具,SQL转CSV/JSON/XML在线工具,online
CSV 与 JSON/XML/HTML/TSV/SQL 等互转,单页多 Tab。 在线工具,CSV 工具包在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online