运行Docker和MySQL的服务器硬盘应该怎么划分系统盘和数据盘?

在运行 Docker 和 MySQL 的服务器中,合理划分系统盘和数据盘对性能、安全性和可维护性至关重要。以下是推荐的硬盘划分策略:


一、基本原则

  1. 分离系统与数据

    • 系统盘(OS + Docker 引擎)和数据盘(MySQL 数据文件)应分开。
    • 防止数据增长导致系统盘满,影响系统稳定性。
  2. 使用独立的数据盘挂载到容器

    • MySQL 数据建议挂载到独立的数据卷(volume)或绑定挂载(bind mount),且该目录位于单独的数据盘上。
  3. 考虑 I/O 性能

    • MySQL 对磁盘 I/O 敏感,建议使用高性能磁盘(如 SSD)作为数据盘。
  4. 便于备份与迁移

    • 数据集中存储,方便做快照、备份和迁移。

二、推荐的硬盘划分方案

假设你有一块或多块硬盘,可以按以下方式划分:

方案 A:两块硬盘(推荐)

硬盘 用途 容量建议 文件系统
系统盘(/dev/sda) 操作系统、Docker 引擎、容器镜像等 50–100GB ext4/xfs
数据盘(/dev/sdb) MySQL 数据文件、日志、备份等 根据数据量决定(如 200GB 起) xfs/ext4(建议 xfs,适合大文件)
具体操作步骤:
  1. 安装操作系统到 /dev/sda,划分根分区 / 和 swap。

  2. /dev/sdb 格式化并挂载到 /data/var/lib/mysql-data

    mkfs.xfs /dev/sdb
    mkdir /data
    mount /dev/sdb /data
  3. /etc/fstab 中添加自动挂载:

    /dev/sdb /data xfs defaults 0 0
  4. 启动 MySQL 容器时,将数据目录挂载到 /data/mysql

    docker run -d 
      --name mysql 
      -v /data/mysql:/var/lib/mysql 
      -e MYSQL_ROOT_PASSWORD=your_password 
      mysql:8.0

方案 B:一块硬盘(资源受限场景)

如果只有一块硬盘,仍建议逻辑分离:

分区 用途 建议比例
/(主分区) 系统 + Docker 镜像 30%(如 100GB)
/data/var/lib/docker-volumes MySQL 数据 70%

注意:避免将 MySQL 数据直接放在 /var/lib/mysql(宿主机默认路径),而应使用外部挂载点。


三、Docker 存储优化建议

  1. Docker 数据目录可选迁移(可选)

    • 默认 Docker 将镜像和容器存在 /var/lib/docker,可能占用大量空间。
    • 若系统盘小,可将 Docker 根目录迁移到数据盘:
      // /etc/docker/daemon.json
      {
        "data-root": "/data/docker"
      }
    • 重启 Docker 服务生效。
  2. 使用命名卷(Named Volume)管理 MySQL 数据

    docker volume create --driver local 
      --opt type=xfs 
      --opt device=/dev/sdb 
      --opt o=bind 
      mysql_data

    或更简单地使用 bind mount。


四、MySQL 特别注意事项

  • 数据目录/var/lib/mysql → 挂载到独立磁盘
  • 日志文件:binlog、redo log、slow query log 建议也在数据盘
  • 临时文件:确保 tmpdir 不在系统盘
  • 权限设置:确保 MySQL 容器有权限读写挂载目录

五、监控与维护

  • 监控磁盘使用率(如用 df -h、Prometheus + Node Exporter)
  • 设置告警:数据盘使用 > 80%
  • 定期备份 /data/mysql 到其他存储或云存储

总结:最佳实践

推荐配置

  • 系统盘:50–100GB,SSD,存放 OS 和 Docker 引擎
  • 数据盘:独立 SSD,挂载到 /data,存放 MySQL 数据
  • 使用 -v /data/mysql:/var/lib/mysql 挂载
  • 可选:迁移 Docker 根目录到数据盘

避免做法

  • 把 MySQL 数据放在系统盘
  • 不做磁盘分离,导致系统因磁盘满而宕机
  • 使用 HDD 承载高并发 MySQL 业务

通过以上划分,你可以实现:

  • 更高的 I/O 性能
  • 更好的故障隔离
  • 更容易的备份与扩容

如有更多需求(如高可用、集群部署),可进一步引入 LVM、RAID 或云存储方案。

未经允许不得转载:云计算导航 » 运行Docker和MySQL的服务器硬盘应该怎么划分系统盘和数据盘?