对于只有 1G 内存(1GB RAM) 的服务器,安装 MySQL 需要特别注意资源占用,避免因内存不足导致服务崩溃或系统卡顿。以下是推荐的方案和配置建议:
✅ 推荐选择:MySQL 5.7 或 MariaDB 10.3+
1. MySQL 5.7
- 相比 MySQL 8.0,MySQL 5.7 内存占用更小,更适合低内存环境。
- MySQL 8.0 默认启用更多功能(如新的优化器、数据字典、缓存等),启动后可能占用 400MB~800MB 内存,在 1G 内存下容易导致 OOM(内存溢出)。
- MySQL 5.7 在轻量使用场景下,内存占用可控制在 200MB~400MB。
⚠️ 注意:MySQL 5.7 已于 2023 年 10 月停止官方支持(EOL),仅建议用于短期项目或有维护能力的用户。
2. MariaDB(推荐)
- MariaDB 是 MySQL 的一个分支,性能相近但更轻量、对低配机器更友好。
- 推荐版本:MariaDB 10.3、10.5 或 10.6(避免最新版如果稳定性要求高)。
- 内存占用更小,社区活跃,长期支持好。
✅ 综合推荐:MariaDB 10.5 或 10.6(平衡性能、稳定性和资源消耗)
🛠️ 必须进行的优化配置(my.cnf)
编辑 /etc/mysql/my.cnf 或 /etc/my.cnf,添加以下精简配置:
[mysqld]
# 基础设置
port = 3306
socket = /var/lib/mysql/mysql.sock
# 禁用 DNS 解析(节省资源)
skip-name-resolve
# 最小化日志(除非需要)
skip-log-bin
log-error = /var/log/mysqld.log
# 关键:降低内存使用
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 64K
read_buffer_size = 64K
join_buffer_size = 64K
tmp_table_size = 16M
max_heap_table_size = 16M
# InnoDB 设置(重点)
innodb_buffer_pool_size = 128M # 最大可设为 256M,但不要超过 1/3 总内存
innodb_log_file_size = 16M
innodb_flush_log_at_trx_commit = 2
innodb_file_per_table = 1
# 连接相关
max_connections = 50 # 避免太多连接耗尽内存
wait_timeout = 60
interactive_timeout = 60
# 禁用不必要的功能
performance_schema = OFF
query_cache_type = 0
query_cache_size = 0
💡 提示:
innodb_buffer_pool_size是最大头的内存占用项,1G 内存建议设为128M~256M。
🔧 其他建议
-
使用 swap 分区:
- 即使是 1G 内存,也建议创建 1G~2G 的 swap 文件,防止 OOM 崩溃。
sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile
- 即使是 1G 内存,也建议创建 1G~2G 的 swap 文件,防止 OOM 崩溃。
-
监控内存使用:
- 使用
htop、free -h、mysqladmin processlist观察负载。
- 使用
-
避免运行其他服务:
- 不要在同一台机器上运行 Apache/Nginx + PHP + MySQL,资源会吃紧。
-
考虑替代方案:
- 如果只是轻量级应用,可考虑 SQLite(无进程、零配置)。
- 或使用外部数据库(如云数据库 RDS)减轻服务器压力。
✅ 总结
| 项目 | 推荐 |
|---|---|
| 数据库 | MariaDB 10.5/10.6(首选)或 MySQL 5.7 |
| 内存配置重点 | innodb_buffer_pool_size = 128M~256M |
| 是否启用 swap | ✅ 强烈建议 |
| 同时运行 Web 服务? | ❌ 不推荐,除非极轻量 |
如果你提供具体用途(如 WordPress、自建应用、开发测试等),我可以给出更精确的配置建议。
轻量云Cloud