
前言:
使用docker compose 详细部署mysql5.7版本数据库详细步骤
环境:Linux Server + Docker + Docker ComposeMySQL 版本:5.7.44
适用场景:测试 / 生产 / 学习 / 云服务器
一、为什么选择 MySQL 5.7?
虽然 MySQL 8.0 已经成为主流,但在大量存量系统中:
- MySQL 5.7 依然是事实标准
- 很多老项目 / 中间件 / ORM 对 5.7 更友好
- 对稳定性要求高的系统仍大量使用 5.7
因此,掌握一套稳定、规范的 MySQL 5.7 Docker 部署方案仍然非常有价值。
二、部署目标
本次部署目标如下:
- 使用 Docker Compose
- MySQL 版本 5.7
- 使用 相对路径 ./ 进行目录挂载
- 数据、日志、配置全部可持久化
- 配置方式符合 官方镜像推荐
- 可长期运行,适合生产环境
三、目录结构设计(非常重要)
在服务器上创建如下目录结构:
text
mysql5.7/
├── docker-compose.yml
├── data/ # MySQL 数据目录
├── log/ # MySQL 日志目录
└── config/
└── my.cnf # 自定义配置文件
创建目录:
bash
mkdir -p mysql5.7/{data,log,config}
cd mysql5.7
如果希望自定义docker网络的话,可以运行:
go
docker network create sql_default
计划使用默认的话,就删除下面内容中的关于networks配置的即可:
go
networks:
- sql_default
networks:
sql_default:
external: true
四、docker-compose.yml(最终推荐版)
yaml
services:
mysql:
image: mysql:5.7
container_name: mysql57
restart: always
ports:
- "13306:3306"
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: admin123456
volumes:
- ./data:/var/lib/mysql
- ./log:/var/log/mysql
- ./config:/etc/mysql/conf.d
- /etc/localtime:/etc/localtime:ro
command:
[
"--character-set-server=utf8mb4",
"--collation-server=utf8mb4_unicode_ci"
]
networks:
- sql_default
networks:
sql_default:
external: true
说明几点关键设计:
-
不再使用
version:字段Docker Compose v2 已废弃该字段,避免启动警告
-
配置目录挂载到
/etc/mysql/conf.d不覆盖官方默认配置,更安全、规范
-
使用 utf8mb4 作为默认字符集
五、MySQL 配置文件(config/my.cnf)
ini
[mysqld]
port=3306
user=mysql
server-id=1
default-storage-engine=INNODB
# 字符集
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake
# 时区
default-time-zone='+8:00'
# 连接数
max_connections=500
max_connect_errors=1000
# InnoDB
innodb_buffer_pool_size=512M
innodb_log_file_size=256M
innodb_file_per_table=1
innodb_flush_log_at_trx_commit=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 模式(5.7 推荐)
sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
如果服务器内存 ≥ 8G,可适当调大
innodb_buffer_pool_size
六、启动 MySQL 容器
bash
docker compose up -d
首次启动会自动初始化数据库文件。
七、验证 MySQL 是否启动成功
查看日志:
bash
docker logs mysql57
看到如下关键日志,说明初始化成功:
text
MySQL init process done. Ready for start up.
八、连接 MySQL 验证
方式一:宿主机连接
bash
mysql -h 127.0.0.1 -P 13306 -u root -p
方式二:容器内连接(推荐)
bash
docker exec -it mysql57 mysql -uroot -p
输入密码:
admin123456
能正常进入即表示部署完成。
九、常见问题说明
1️⃣ 时区 Warning 是否需要处理?
text
Warning: Unable to load '/usr/share/zoneinfo/...'
这是 MySQL 官方镜像的常见警告,对业务无实质影响。
如需彻底消除,可额外挂载:
yaml
- /usr/share/zoneinfo:/usr/share/zoneinfo:ro
2️⃣ data 目录能否删除?
- ❌ 生产环境严禁随意删除
- ✅ 仅在明确需要重建数据库时才删除
十、总结
✔ 本方案适用于 Linux 服务器
✔ 目录结构清晰、可维护
✔ 符合 MySQL 官方 Docker 镜像设计
✔ 可直接用于生产或教学
✔ 后续可扩展主从、备份、迁移