MySQL为什么不用Docker进行部署

0 阅读2分钟

一、为什么很多公司“生产 MySQL 不用 Docker”?

1️⃣ 数据库是“有状态服务”

MySQL 是典型的:

  • 有状态(Stateful)
  • 强依赖磁盘 IO
  • 强依赖数据安全

而 Docker 天生是:

  • 面向无状态应用(Stateless)
  • 容器可随时销毁

数据库容器如果管理不好:

  • 容器删了 → 数据丢
  • volume 配置错 → 数据损坏
  • 误操作 rm -rf volume → 直接爆炸 💥

所以很多公司更偏向:

  • 物理机安装
  • 或 VM 安装

2️⃣ 性能 & IO 问题

数据库最吃:

  • 磁盘随机读写
  • fsync
  • 页缓存
  • NUMA
  • 内核调优

Docker 可能带来:

问题说明
overlay2 文件系统IO 有额外层
cgroup 限制内存 / CPU 限制
内核参数不可控部分 sysctl 受限

对于高并发 OLTP:

  • 金融
  • 交易系统
  • 电商核心订单库

很多企业更稳妥做法:

直接裸机 + tuned 内核优化


3️⃣ 运维复杂度

Docker MySQL 会涉及:

  • 数据目录挂载
  • 权限映射
  • 时区
  • 编码
  • 日志目录
  • binlog 挂载
  • 主从复制端口暴露

对 DBA 来说:

yum install mysql-server
systemctl start mysqld

更简单直接。

二、那为什么很多人又用 Docker?

因为它在 这些场景非常爽


✅ 场景 1:开发环境

docker run -d \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=123456 \
  mysql:8.0

优点:

  • 秒启动
  • 多版本切换方便
  • 不污染系统
  • 团队统一环境

对于你这种做:

  • SpringBoot
  • RAG
  • Milvus
  • ClickHouse
  • Kafka

Docker Compose 一起拉起来非常爽。


✅ 场景 2:CI / 自动化测试

单元测试:

  • 每次启动一个 MySQL
  • 测试完销毁

极其方便。


✅ 场景 3:中小项目

  • 访问量低
  • 非核心交易库
  • 只做简单存储

完全 OK。


三、那企业级到底怎么选?

我们分三种级别:


🥉 小型项目

用 Docker 没问题。


🥈 中型公司

常见做法:

  • MySQL 用 VM(不容器)
  • 应用容器化

因为数据库更重。


🥇 大型互联网

一般是:

  • 专用数据库物理机
  • 自研数据库平台
  • 或 Kubernetes StatefulSet + 专门存储

例如:

  • 阿里
  • 腾讯
  • 字节

不会简单 docker run mysql 就完事。


四、K8s 不是也能跑 MySQL 吗?

可以,但要:

  • StatefulSet
  • PVC
  • 专用存储
  • 自动备份
  • 主从自动恢复

不是简单容器,而是完整数据库平台。


五、什么时候“不要”用 Docker 部署 MySQL?

✔ 金融核心交易库
✔ 日均千万级写入
✔ 对延迟 < 5ms 极其敏感
✔ 需要 NUMA 优化
✔ 需要特殊 IO 调优


六、什么时候“强烈推荐”用 Docker?

✔ 本地开发
✔ 多版本测试
✔ 教学 / Demo
✔ 微服务 demo 环境
✔ CI/CD