news 2026/4/18 8:20:15

Docker Compose 部署 MySQL 5.7(生产级实践方案)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Docker Compose 部署 MySQL 5.7(生产级实践方案)

前言:

使用docker compose 详细部署mysql5.7版本数据库详细步骤

环境:Linux Server + Docker + Docker Compose
MySQL 版本: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
  • 使用相对路径 ./ 进行目录挂载
  • 数据、日志、配置全部可持久化
  • 配置方式符合官方镜像推荐
  • 可长期运行,适合生产环境

三、目录结构设计(非常重要)

在服务器上创建如下目录结构:

mysql5.7/ ├── docker-compose.yml ├── data/ # MySQL 数据目录 ├── log/ # MySQL 日志目录 └── config/ └── my.cnf # 自定义配置文件

创建目录:

mkdir-p mysql5.7/{data,log,config}cdmysql5.7

如果希望自定义docker网络的话,可以运行:

docker network create sql_default

计划使用默认的话,就删除下面内容中的关于networks配置的即可:

networks:-sql_default networks:sql_default:external:true

四、docker-compose.yml(最终推荐版)

services:mysql:image:mysql:5.7container_name:mysql57restart:alwaysports:-"13306:3306"environment:TZ:Asia/ShanghaiMYSQL_ROOT_PASSWORD:admin123456volumes:-./data:/var/lib/mysql-./log:/var/log/mysql-./config:/etc/mysql/conf.d-/etc/localtime:/etc/localtime:rocommand:["--character-set-server=utf8mb4","--collation-server=utf8mb4_unicode_ci"]networks:-sql_defaultnetworks:sql_default:external:true

说明几点关键设计:

  1. 不再使用version:字段
    Docker Compose v2 已废弃该字段,避免启动警告

  2. 配置目录挂载到/etc/mysql/conf.d
    不覆盖官方默认配置,更安全、规范

  3. 使用 utf8mb4 作为默认字符集


五、MySQL 配置文件(config/my.cnf)

[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 容器

dockercompose up -d

首次启动会自动初始化数据库文件。


七、验证 MySQL 是否启动成功

查看日志:

dockerlogs mysql57

看到如下关键日志,说明初始化成功:

MySQL init process done. Ready for start up.

八、连接 MySQL 验证

方式一:宿主机连接

mysql -h127.0.0.1 -P13306-u root -p

方式二:容器内连接(推荐)

dockerexec-it mysql57 mysql -uroot -p

输入密码:

admin123456

能正常进入即表示部署完成。


九、常见问题说明

1️⃣ 时区 Warning 是否需要处理?

Warning: Unable to load '/usr/share/zoneinfo/...'

这是MySQL 官方镜像的常见警告,对业务无实质影响。

如需彻底消除,可额外挂载:

-/usr/share/zoneinfo:/usr/share/zoneinfo:ro

2️⃣ data 目录能否删除?

  • ❌ 生产环境严禁随意删除
  • ✅ 仅在明确需要重建数据库时才删除

十、总结

✔ 本方案适用于Linux 服务器
✔ 目录结构清晰、可维护
✔ 符合 MySQL 官方 Docker 镜像设计
✔ 可直接用于生产或教学
✔ 后续可扩展主从、备份、迁移


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 0:29:34

Ansys SpaceClaim 2025 R2 软件学习(DAY1):界面与功能详解

每日更新教程,评论区答疑解惑,小白也能变大神!" 目录 第一章:界面总体布局与核心理念 第二章:顶部菜单栏详解 1. 文件 2. 草图 3. 设计 4. 显示 5. 组件 6. 测量 7. 面片 8. 修复 9. 准备 10. 详细 …

作者头像 李华
网站建设 2026/4/18 3:52:05

爆火的 “死了么” APP安装包来了

“死了么”是一款名字带黑色幽默的轻量化安全提醒APP,核心功能简洁好上手:用户填写姓名及紧急联系人邮箱,设定每日签到时间, 软件下载地址 若连续48小时未签到,系统会自动给联系人发送邮件,提醒对方“可能…

作者头像 李华
网站建设 2026/4/18 3:52:55

【计算机毕业设计案例】基于springboot的康复医院护工管理平台护工管理便捷服务系统(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/4/18 3:45:59

Python中的Statsmodels:统计建模与假设检验

一、什么是 Statsmodels? statsmodels(全称:Statistical Models)是一个基于 NumPy、SciPy 和 pandas 构建的 Python 库,主要用于: 拟合统计模型(如线性回归、逻辑回归、广义线性模型&#xff…

作者头像 李华