在轻量服务器(如腾讯云轻量应用服务器、阿里云共享型实例,通常 1~2 核 CPU、1~4GB 内存)上同时安装并运行 MySQL、Redis 和 Java 应用(JAR 包)是可行的,但需谨慎规划资源与配置,避免内存溢出或性能瓶颈。以下是兼顾稳定性、安全性和可维护性的生产级轻量部署方案:
✅ 前提检查(务必执行)
| 项目 | 推荐最低要求 | 检查命令 |
|---|---|---|
| 内存 | ≥ 2GB(推荐 3GB+) | free -h |
| 磁盘 | ≥ 20GB(SSD 更佳) | df -h |
| 系统 | Ubuntu 22.04 / Debian 12 / CentOS Stream 9(推荐 LTS) | cat /etc/os-release |
| Swap | 建议启用 1~2GB swap(防 OOM) | swapon --show 或 sudo fallocate -l 2G /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile |
⚠️ 若内存仅 1GB,强烈不建议同时跑三者(MySQL 默认占用 >500MB),请优先考虑 Serverless/云托管或升级配置。
🛠️ 一、安装与基础配置(以 Ubuntu 22.04 为例)
1. 更新系统 & 安装基础工具
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget gnupg2 lsb-release apt-transport-https
2. 安装 MySQL(使用官方 APT 仓库,避免 snap 占用过多内存)
# 添加 MySQL 官方仓库(8.0 LTS)
curl -fsSL https://repo.mysql.com/mysql-apt-config_0.8.24-1_all.deb -o mysql-apt.deb
sudo dpkg -i mysql-apt.deb # 选择 MySQL 8.0 → OK → Apply
sudo apt update
sudo apt install -y mysql-server
# 🔐 安全加固(首次运行必做)
sudo mysql_secure_installation
# → 设置 root 密码(选 strong),禁用匿名用户、禁用远程 root、删除 test DB、重载权限
3. 优化 MySQL(关键!降低内存占用)
编辑 /etc/mysql/mysql.conf.d/mysqld.cnf:
[mysqld]
# ⬇️ 轻量适配:大幅降低内存用量
innodb_buffer_pool_size = 128M # 默认 128MB → 可接受(原可能 128MB+)
key_buffer_size = 16M
max_connections = 50 # 默认 151 → 减少连接数
table_open_cache = 400
sort_buffer_size = 256K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
tmp_table_size = 32M
max_heap_table_size = 32M
skip-log-bin # 关闭 binlog(开发/轻量环境可省空间和IO)
# 👇 禁用不需要的引擎(节省内存)
skip-innodb_log_checksums
innodb_log_file_size = 48M
重启:sudo systemctl restart mysql
✅ 验证:
mysql -u root -p -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"应显示134217728(128MB)
4. 安装 Redis(使用最新稳定版,非系统默认旧版)
# 下载编译安装(更可控,避免 systemd 冲突)
cd /tmp
wget https://download.redis.io/releases/redis-7.2.5.tar.gz
tar xzf redis-7.2.5.tar.gz
cd redis-7.2.5
make && sudo make install
# 创建配置目录 & 配置文件
sudo mkdir -p /etc/redis
sudo cp redis.conf /etc/redis/redis.conf
5. 优化 Redis(轻量关键!)
编辑 /etc/redis/redis.conf:
bind 127.0.0.1 ::1 # 仅本地访问(安全!)
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes # 后台运行
supervised systemd
pidfile /var/run/redis/redis-server.pid
loglevel notice
logfile /var/log/redis/redis-server.log
databases 16
save 900 1 # 减少持久化频率(轻量可接受)
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /var/lib/redis
# ⬇️ 内存限制(防吃光内存!)
maxmemory 256mb
maxmemory-policy allkeys-lru # 内存满时自动淘汰
# 👇 禁用 AOF(简化,除非需要强持久化)
appendonly no
创建运行目录 & 启动:
sudo mkdir -p /var/lib/redis /var/log/redis /var/run/redis
sudo chown -R redis:redis /var/lib/redis /var/log/redis /var/run/redis
sudo useradd -r -s /bin/false -d /var/lib/redis redis
# 启动 Redis(systemd 方式)
sudo cp /tmp/redis-7.2.5/utils/systemd-system-unit-files/redis-server.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable redis-server
sudo systemctl start redis-server
# ✅ 验证:redis-cli ping → 返回 "PONG"
6. 安装 Java 运行环境(推荐 OpenJDK 17 LTS)
sudo apt install -y openjdk-17-jre-headless
java -version # 应输出 openjdk 17.x
7. 部署 Java 应用(JAR 包)
假设你的 JAR 包为 myapp.jar,放在 /opt/myapp/:
sudo mkdir -p /opt/myapp
sudo cp ~/myapp.jar /opt/myapp/
sudo chown -R $USER:$USER /opt/myapp
✅ 推荐方式:使用 systemd 托管(自动重启、日志、资源限制)
创建服务文件 /etc/systemd/system/myapp.service:
[Unit]
Description=My Java Application
After=network.target mysql.service redis-server.service
[Service]
Type=simple
User=$USER # 替换为实际运行用户(如 ubuntu)
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/java -Xms128m -Xmx512m -jar /opt/myapp/myapp.jar
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
# 👇 关键:限制内存防拖垮整机
MemoryLimit=768M
CPUQuota=80%
[Install]
WantedBy=multi-user.target
启用并启动:
sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
# 查看日志:sudo journalctl -u myapp -f
# 检查状态:sudo systemctl status myapp
🔒 二、安全与运维要点
| 项目 | 措施 | 命令/说明 |
|---|---|---|
| 防火墙 | 仅开放必要端口 | sudo ufw allow OpenSSH sudo ufw enable(禁止开放 3306/6379 到公网!) |
| MySQL 访问 | 创建专用用户 + 本地连接 | CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'strong_pwd'; GRANT SELECT,INSERT,UPDATE ON mydb.* TO 'appuser'@'localhost'; |
| Redis 访问 | 设置密码(可选,但推荐) | 在 redis.conf 中添加 requirepass your_strong_password,Java 应用连接时加 password 参数 |
| 监控内存 | 实时查看 | htop 或 free -h;重点关注 available 列 |
| 日志轮转 | 防止日志占满磁盘 | sudo apt install logrotate,为 /var/log/redis/*.log 和应用日志配置轮转 |
📈 三、典型内存占用参考(Ubuntu 22.04 + 2GB RAM)
| 组件 | 启动后常驻内存(约) | 备注 |
|---|---|---|
| MySQL | 150–200 MB | 优化后 |
| Redis | 5–10 MB | 空载,有数据会增长 |
| Java 应用(-Xmx512m) | 300–450 MB | 启动后 RSS 实际占用 |
| 系统 + SSH + 其他 | ~300 MB | |
| 总计 | ~1.1–1.4 GB | ✅ 可控,留足缓冲 |
💡 若 Java 应用较重(如 Spring Boot),建议
-Xmx384m并关闭 Actuator/DevTools。
✅ 四、验证连通性(Java 应用内)
确保你的 application.properties 或配置中:
# MySQL(本地 socket 或 127.0.0.1)
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&serverTimezone=UTC
# Redis
spring.redis.host=127.0.0.1
spring.redis.port=6379
# spring.redis.password=your_pass # 如已设置
🚫 不推荐的做法(避坑!)
- ❌ 使用
docker run -d mysql:8.0(Docker Daemon 自身占 200MB+,镜像臃肿,轻量服务器不友好) - ❌ 直接
nohup java -jar ... &(无进程管理、崩溃不自启、日志难查) - ❌ MySQL 开启
innodb_buffer_pool_size = 512M(2GB 内存下极易 OOM) - ❌ Redis 不设
maxmemory(内存泄漏或大量数据直接拖垮服务器)
✅ 总结:轻量服务器三件套部署口诀
“MySQL 调小池,Redis 设上限,Java 加内存限,全用 systemd 托管,防火墙只开 SSH。”
按此方案,你可在 2GB 内存轻量服务器上长期稳定运行 MySQL + Redis + Java 应用,兼顾性能与安全。如后续流量增长,再平滑迁移到云数据库(如腾讯云 CVM + 云数据库 MySQL/Redis)。
需要我为你生成:
- ✅ 完整的
myapp.service模板(含环境变量、JVM 参数调优) - ✅ MySQL + Redis 一键优化脚本(自动修改配置)
- ✅ Spring Boot 应用健康检查 + 启动脚本示例
欢迎随时提出 👇
CLOUD云计算