云服务器部署MySQL时,SSD系统盘和数据盘如何合理分配容量?

在云服务器上部署 MySQL 时,合理分配 SSD 系统盘(OS 盘)和数据盘(MySQL 数据存储盘)的容量,是保障系统稳定性、性能、可维护性与成本效益的关键。以下是经过生产实践验证的分层规划建议(以主流云厂商如阿里云、腾讯云、AWS 为例):


✅ 一、核心原则(先记牢)

维度 建议
职责分离 系统盘只放 OS、MySQL 二进制、配置文件、临时日志(如 /tmp, /var/log/mysql);所有业务数据(datadir)、binlog、redo log、slow log、备份临时目录必须放在独立数据盘
I/O 隔离 避免系统盘与数据库 I/O 争抢(尤其高并发写场景),SSD 数据盘需单独挂载并 noatime,nobarrier(或按云平台推荐优化)
容量预留 数据盘需为未来6–12个月增长+备份空间+临时操作(如大表 ALTER、导入导出) 预留充足余量(建议 ≥30%)
可靠性优先 数据盘务必开启云平台提供的多副本/三副本存储(如阿里云 ESSD PL1+、腾讯云 CBS 高性能云硬盘),系统盘可选普通 SSD

✅ 二、容量分配参考方案(按业务规模)

场景 系统盘(SSD) 数据盘(SSD) 说明
小型应用
(日增数据 < 100MB,QPS < 500)
80–120 GB
• OS + MySQL 二进制(~1–2GB)
/var/log(轮转保留30天)
/tmp(临时排序/JOIN)
100–500 GB
datadir(当前数据×3)
• binlog(保留7天,≈日增数据×7)
• redo log(默认768MB,无需额外配)
• slow log(压缩归档)
✅ 系统盘够用即可,避免浪费;数据盘按「当前数据 × 3」起步(含增长+备份缓冲)
中型生产库
(日增 1–5GB,QPS 1k–5k,含主从)
120–200 GB
• 含监控X_X(Prometheus Node Exporter)、运维工具、安全加固组件
500 GB – 2 TB
datadir:当前数据 × 2.5
• binlog:保留14天(主从延迟容错)
预留 ≥200GB 用于逻辑备份(mysqldump/xtrabackup 临时空间)
• 若启用 InnoDB Buffer Pool > 16GB,确保系统内存足够(非磁盘)
⚠️ 重点:xtrabackup 备份时需 1.5× 原数据空间临时存放!务必在数据盘预留(不可用系统盘)
大型 OLTP / 分析型库
(日增 > 10GB,QPS > 10k,多实例/读写分离)
200–500 GB
• 可能部署多个中间件(ProxySQL、Orchestrator)
• 审计日志、安全日志集中存储
2–10 TB+(可多盘 RAID 0/LVM 或分布式存储)
• 按 「年增长量 × 1.5」预估(例:年增 3TB → 配 4.5TB)
binlog 单独挂载小容量高性能盘(如 500GB ESSD PL3)提升主从同步性能
• redo log 推荐 NVMe 盘(若云平台支持)
💡 进阶:将 binloggeneral_logslow_log 分离到不同挂载点,便于 I/O 监控与限流

✅ 三、关键配置与最佳实践

  1. 挂载与权限

    # 创建独立挂载点(示例)
    mkdir -p /data/mysql/{data,logs,backup}
    mount /dev/vdb1 /data/mysql/data  # 数据文件
    mount /dev/vdc1 /data/mysql/logs  # binlog/slowlog
    chown -R mysql:mysql /data/mysql
  2. MySQL 配置示例(my.cnf)

    [mysqld]
    datadir = /data/mysql/data
    socket = /data/mysql/data/mysql.sock
    log-error = /data/mysql/logs/error.log
    slow_query_log_file = /data/mysql/logs/slow.log
    log_bin = /data/mysql/logs/binlog  # 注意:不带后缀,由MySQL自动管理
    relay_log = /data/mysql/logs/relaylog
    tmpdir = /data/mysql/tmp           # 避免 /tmp 写满
  3. 空间监控告警(必做!)

    • 使用 df -h + inotifywait 监控 /data/mysql/data 使用率
    • 设置阈值:≥85% 触发企业微信/钉钉告警,≥90% 自动冻结写入(通过 SET GLOBAL read_only=ON
    • 推荐工具:Prometheus + Grafana(监控 node_filesystem_avail_bytes
  4. 备份策略影响容量 备份方式 对磁盘要求 建议
    XtraBackup 物理备份 需要 ≈1.2–1.5× 当前数据空间(临时解压/压缩) 必须在数据盘预留足够空间,禁止使用系统盘备份
    mysqldump 逻辑备份 导出期间临时占用空间小,但压缩包较大 .sql.gz 存至对象存储(OSS/COS),本地仅保留最近3份

❌ 四、常见错误(避坑指南)

  • 🚫 将 datadir 放在系统盘 → 磁盘打满导致 MySQL 崩溃 + 系统无法登录
  • 🚫 数据盘未预留备份空间 → xtrabackup 失败,备份链中断
  • 🚫 使用系统盘 /var/lib/mysql 默认路径,未修改 datadir → 后期迁移风险极高
  • 🚫 忽略 binlog 增长 → 主从延迟飙升甚至复制中断(尤其大事务场景)
  • 🚫 用“按量付费”数据盘却未设置自动扩容 → 业务高峰期突然写满

✅ 五、一句话总结(可直接执行)

系统盘:120GB 足够(OS+MySQL二进制+基础日志);数据盘 = 当前数据量 × 2.5 + 预估6个月增长量 + 备份所需临时空间(≥200GB),全部挂载到 /data/mysql 下并严格分离目录。

需要我帮你生成:

  • ✅ 云服务器创建时的磁盘配置截图(阿里云/腾讯云界面指引)
  • ✅ 自动化挂载 + 权限初始化脚本(Bash)
  • ✅ MySQL 安装 + 安全配置 + 监控部署一键脚本
    欢迎随时提出 👇
未经允许不得转载:云知识CLOUD » 云服务器部署MySQL时,SSD系统盘和数据盘如何合理分配容量?