走啊走
加油

轻量服务器上如何同时安装并运行MySQL、Redis和Java应用(JAR包)?

服务器价格表

在轻量服务器(如腾讯云轻量应用服务器、阿里云共享型实例,通常 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 --showsudo 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 参数
监控内存 实时查看 htopfree -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 应用健康检查 + 启动脚本示例
    欢迎随时提出 👇