在低配服务器上同时运行 MySQL 和 Redis,核心挑战在于内存竞争。MySQL 是“吃内存大户”(主要靠 buffer pool),而 Redis 是“内存依赖型”(数据全在 RAM)。如果配置不当,极易触发 OOM(内存溢出)导致服务崩溃。
以下是针对低配服务器(通常指 1GB – 4GB 内存)的推荐配置策略:
1. 核心原则:预留系统缓冲
无论服务器配置多低,必须为操作系统内核、文件系统缓存和其他进程预留至少 20%~30% 的内存。不要试图把内存全部分配给数据库。
- 1GB 内存:极不推荐同时运行生产环境的 MySQL + Redis。如果必须运行,建议仅用于开发/测试,且限制非常严格。
- 2GB 内存:勉强可行,需极度精简配置。
- 4GB 内存:比较理想的入门级生产环境。
2. 具体配置方案
场景 A:1GB ~ 2GB 内存(极限生存模式)
此场景下,必须牺牲性能换取稳定性,优先保证 Redis 或 MySQL 其中一个存活。
| 组件 | 关键参数设置 | 说明 |
|---|---|---|
| Redis | maxmemory-policy: allkeys-lrumaxmemory: 600MB (约占总内存 50%) |
Redis 默认会占用所有可用内存。必须强制限制,否则 MySQL 启动即被杀。开启 LRU 淘汰策略防止内存爆满。 |
| MySQL | innodb_buffer_pool_size: 300MBkey_buffer_size: 64MBquery_cache_size: 0 (关闭) |
InnoDB 缓冲池要设小,避免抢占 Redis 内存。关闭查询缓存(MySQL 5.7+ 已废弃,但旧版本务必关闭)。 若使用 MyISAM 引擎,可稍调大 key_buffer,但强烈建议全用 InnoDB。 |
| System | vm.swappiness: 10 |
降低系统使用 Swap 的倾向,虽然低配机容易 Swap,但尽量不让 DB 频繁换页。 |
注意:在此配置下,MySQL 的并发能力极低,仅适合低频访问;Redis 只能存储少量热点数据。
场景 B:4GB 内存(推荐起步配置)
这是大多数小型应用(如个人博客、小型 SaaS)能跑通的底线。
| 组件 | 关键参数设置 | 说明 |
|---|---|---|
| Redis | maxmemory-policy: volatile-lru 或 allkeys-lfumaxmemory: 2.5GB |
保留约 1.5GB 给系统和 MySQL。使用 LFU/LRU 策略让冷数据自动淘汰。 |
| MySQL | innodb_buffer_pool_size: 1.5GBinnodb_log_file_size: 256Mtmp_table_size: 64M |
此时可以分配更多内存给 InnoDB 以提升查询速度。限制临时表大小,防止复杂查询撑爆内存。 |
| System | vm.swappiness: 10 |
保持低 Swap 倾向。 |
3. 优化与避坑指南
除了调整参数,以下操作对低配服务器至关重要:
A. 关闭不必要的功能
- MySQL:
- 关闭
log_bin(二进制日志):除非你需要主从复制或数据恢复,否则日志写入会消耗大量 I/O 和 CPU。 - 关闭
slow_query_log:在生产环境高负载时,记录慢查询本身也会产生开销。 - 调整
max_connections:低配服务器不要开太多连接,设为50-100即可,配合应用层连接池使用。
- 关闭
- Redis:
- 关闭持久化(RDB/AOF)中的部分选项:如果数据允许丢失,可以只开启 RDB 快照(频率调低),或者完全禁用持久化(仅限纯缓存场景)。
- 禁用
appendonly yes并设置为每秒同步一次,减少磁盘 I/O。
B. 监控与告警
低配服务器没有容错空间,必须安装轻量级监控:
- 使用
htop实时观察内存。 - 配置简单的脚本监控:当内存使用率超过 85% 时,发送报警。
- 检查 Swap 使用情况:如果 Swap 开始频繁使用,说明内存已经严重不足,性能会断崖式下跌。
C. 架构层面的替代方案
如果业务增长发现 4GB 内存不够用了,不要盲目加内存,考虑以下架构调整:
- 读写分离:将历史数据归档到冷存储,只留热数据在 MySQL。
- 分库分表:缩小单表数据量,减少索引内存占用。
- Redis 做唯一缓存:确保 Redis 里只存最热的 Key,不要存大对象(BigKey)。
- 迁移到云托管:如果预算允许,将 MySQL 迁移到云厂商的 RDS(按量付费),本地只跑 Redis,这样成本可能更低且更稳定。
总结建议
- 最低配置:2GB 内存,Redis 限 600MB,MySQL 限 300MB,关闭日志。
- 推荐配置:4GB 内存,Redis 限 2.5GB,MySQL 限 1.5GB。
- 红线:永远不要让
MySQL Buffer Pool + Redis Max Memory > 物理内存的 70%。
如果您的业务数据量预计会快速增长,建议在初期就规划好升级路线(如增加独立 Redis 节点或迁移至云数据库),而不是在单机上无限压榨配置。
云小栈