Ubuntu服务器部署MySQL+Redis+Nginx及自动备份指南

Ubuntu服务器部署MySQL+Redis+Nginx及自动备份指南

1. 项目概述

最近在帮朋友部署一套Web应用的基础环境,需要在一台全新的Ubuntu服务器上搭建MySQL、Redis和Nginx服务,并配置自动备份方案。这个看似简单的任务,在实际操作中却有不少需要注意的细节和坑点。今天就把完整的部署流程和踩坑经验整理出来,希望能帮到有同样需求的开发者。

这套环境组合(MySQL + Redis + Nginx)是目前Web开发中最常见的基础架构之一。MySQL作为关系型数据库存储核心业务数据,Redis作为高性能缓存提升系统响应速度,Nginx则承担反向代理和负载均衡的角色。自动备份则是生产环境必不可少的保障措施。

2. 环境准备

2.1 系统要求

推荐使用Ubuntu 20.04 LTS或22.04 LTS版本,这两个版本都有长期支持,软件包更新维护有保障。服务器配置建议:

  • 最低配置:1核CPU,2GB内存,20GB存储
  • 推荐配置:2核CPU,4GB内存,50GB存储

提示:如果是生产环境,建议将MySQL数据目录挂载到单独的磁盘分区,避免系统盘写满影响服务。

2.2 基础设置

首先更新系统并安装常用工具:

sudo apt update && sudo apt upgrade -y sudo apt install -y curl wget vim git unzip

设置时区(以Asia/Shanghai为例):

sudo timedatectl set-timezone Asia/Shanghai

3. MySQL部署与配置

3.1 安装MySQL

Ubuntu官方源中的MySQL版本可能不是最新的,建议使用MySQL官方仓库:

wget https://dev.mysql.com/get/mysql-apt-config_0.8.22-1_all.deb sudo dpkg -i mysql-apt-config_0.8.22-1_all.deb sudo apt update sudo apt install -y mysql-server

安装过程中会提示设置root密码,请务必设置一个强密码并妥善保管。

3.2 安全配置

运行安全脚本进行基础加固:

sudo mysql_secure_installation

这个脚本会引导你完成以下操作:

  1. 设置root密码(如果安装时未设置)
  2. 移除匿名用户
  3. 禁止root远程登录
  4. 移除测试数据库
  5. 重新加载权限表

3.3 性能调优

编辑MySQL配置文件:

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

根据服务器配置调整以下参数(以4GB内存服务器为例):

[mysqld] innodb_buffer_pool_size = 1G innodb_log_file_size = 256M max_connections = 200 query_cache_size = 64M query_cache_type = 1

重启MySQL使配置生效:

sudo systemctl restart mysql

4. Redis部署与配置

4.1 安装Redis

Ubuntu官方源中的Redis版本通常较旧,建议使用PPA安装最新稳定版:

sudo add-apt-repository ppa:redislabs/redis sudo apt update sudo apt install -y redis-server

4.2 安全配置

默认情况下Redis没有密码保护,这非常危险。编辑配置文件:

sudo vim /etc/redis/redis.conf

修改以下参数:

requirepass your_strong_password bind 127.0.0.1 protected-mode yes

重启Redis服务:

sudo systemctl restart redis-server

4.3 内存管理

根据应用需求调整内存策略:

maxmemory 2gb maxmemory-policy allkeys-lru

这表示当内存使用达到2GB时,Redis会使用LRU算法淘汰最久未使用的键。

5. Nginx部署与配置

5.1 安装Nginx

sudo apt install -y nginx

5.2 基础配置

编辑主配置文件:

sudo vim /etc/nginx/nginx.conf

调整worker进程数(通常设置为CPU核心数):

worker_processes auto;

在events块中调整连接数:

events { worker_connections 1024; multi_accept on; }

5.3 虚拟主机配置

创建一个新的站点配置文件:

sudo vim /etc/nginx/sites-available/your_domain.conf

基本配置模板:

server { listen 80; server_name your_domain.com; location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } location /static/ { alias /path/to/static/files/; expires 30d; } }

启用配置并测试:

sudo ln -s /etc/nginx/sites-available/your_domain.conf /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl restart nginx

6. 自动备份方案

6.1 MySQL备份

创建备份脚本:

sudo vim /usr/local/bin/mysql_backup.sh

脚本内容:

#!/bin/bash DATE=$(date +%Y%m%d%H%M) BACKUP_DIR="/backup/mysql" MYSQL_USER="backup_user" MYSQL_PASSWORD="your_password" mkdir -p $BACKUP_DIR mysqldump -u$MYSQL_USER -p$MYSQL_PASSWORD --all-databases | gzip > "$BACKUP_DIR/mysql_$DATE.sql.gz" # 删除7天前的备份 find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +7 -delete

创建专用备份用户:

CREATE USER 'backup_user'@'localhost' IDENTIFIED BY 'your_password'; GRANT SELECT, SHOW VIEW, RELOAD, REPLICATION CLIENT, EVENT, TRIGGER, LOCK TABLES ON *.* TO 'backup_user'@'localhost'; FLUSH PRIVILEGES;

6.2 Redis备份

Redis默认会定期生成RDB快照,我们只需确保配置正确:

save 900 1 save 300 10 save 60 10000 dbfilename dump.rdb dir /var/lib/redis

也可以手动执行BGSAVE:

redis-cli -a your_password BGSAVE

6.3 备份自动化

使用cron定时执行备份:

sudo crontab -e

添加以下内容(每天凌晨3点执行MySQL备份):

0 3 * * * /usr/local/bin/mysql_backup.sh

7. 安全加固

7.1 防火墙配置

sudo ufw allow ssh sudo ufw allow http sudo ufw allow https sudo ufw enable

7.2 SSH安全

编辑SSH配置文件:

sudo vim /etc/ssh/sshd_config

修改以下参数:

Port 2222 PermitRootLogin no PasswordAuthentication no

重启SSH服务:

sudo systemctl restart sshd

8. 常见问题排查

8.1 MySQL连接问题

错误:ERROR 1045 (28000): Access denied for user...

解决方案:

  1. 检查用户名和密码是否正确
  2. 确认用户是否有从指定IP访问的权限
  3. 检查MySQL是否绑定了正确的网络接口

8.2 Redis内存不足

错误:OOM command not allowed when used memory > 'maxmemory'

解决方案:

  1. 增加maxmemory设置
  2. 调整maxmemory-policy为更积极的淘汰策略
  3. 检查是否有内存泄漏或大键值

8.3 Nginx 502 Bad Gateway

可能原因:

  1. 后端服务未运行
  2. 代理配置错误
  3. 权限问题

排查步骤:

  1. 检查后端服务状态
  2. 查看Nginx错误日志:/var/log/nginx/error.log
  3. 测试代理地址是否能正常访问

9. 性能监控

9.1 基础监控工具

安装htop和net-tools:

sudo apt install -y htop net-tools

9.2 MySQL监控

查看连接数:

SHOW STATUS LIKE 'Threads_connected';

查看慢查询:

SHOW VARIABLES LIKE 'slow_query_log';

9.3 Redis监控

使用info命令查看状态:

redis-cli -a your_password info

重点关注:

  • used_memory
  • connected_clients
  • instantaneous_ops_per_sec

10. 维护与更新

10.1 定期更新

每月执行一次系统更新:

sudo apt update && sudo apt upgrade -y

10.2 日志轮转

配置日志轮转防止日志文件过大:

sudo vim /etc/logrotate.d/nginx

示例配置:

/var/log/nginx/*.log { daily missingok rotate 14 compress delaycompress notifempty create 0640 www-data adm sharedscripts postrotate /usr/sbin/nginx -s reload endscript }

这套环境搭建完成后,基本上可以满足大多数中小型Web应用的需求。在实际使用中,根据业务增长情况,可能需要考虑主从复制、集群等高可用方案。