在云服务器上部署 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 盘(若云平台支持) |
💡 进阶:将 binlog、general_log、slow_log 分离到不同挂载点,便于 I/O 监控与限流 |
✅ 三、关键配置与最佳实践
-
挂载与权限
# 创建独立挂载点(示例) 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 -
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 写满 -
空间监控告警(必做!)
- 使用
df -h+inotifywait监控/data/mysql/data使用率 - 设置阈值:≥85% 触发企业微信/钉钉告警,≥90% 自动冻结写入(通过
SET GLOBAL read_only=ON) - 推荐工具:Prometheus + Grafana(监控
node_filesystem_avail_bytes)
- 使用
-
备份策略影响容量 备份方式 对磁盘要求 建议 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