当前位置: 首页 > news >正文

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应用的需求。在实际使用中,根据业务增长情况,可能需要考虑主从复制、集群等高可用方案。

http://www.jsqmd.com/news/1275187/

相关文章:

  • Python小白也能逆袭!3个月掌握大模型,收藏这份保姆级学习路线
  • 食品产线设备在线监控管理平台方案
  • 3个实战场景:如何用Stable Zero123高效生成3D模型
  • Go2TV:三步实现跨平台智能电视投屏的终极解决方案
  • 无障碍与智能化融合的老年公寓适老化室内设计研究
  • Kali Linux数字取证环境搭建:从安装到工具配置全流程指南
  • 2026年广州企业税务预警了怎么办专业应对策略推荐 - 资讯综合站
  • AI Agent核心技术:从理论到企业级实践
  • PizzaQL API完全参考:查询、变更与订阅操作实战示例
  • 旧Mac升级macOS新系统的终极完整方案:让老设备重获新生
  • Android MVP架构最佳实践:基于MVPArmsTemplate的项目结构设计
  • 《RocketMQ 官网》阅读笔记 RocketMQ 消费者组(Consumer Group)消费者(Consumer)
  • Alt App Installer高级技巧:多部分下载与断点续传功能详解
  • Linux进程控制:fork原理与多进程编程实践
  • G-Helper实战指南:华硕笔记本轻量控制工具的5大创新优势
  • League Akari:英雄联盟玩家的智能助手,游戏体验全面升级
  • 25个Adobe Illustrator脚本终极指南:一键解决你的设计效率难题
  • WzComparerR2:开启冒险岛游戏资源宝库的万能钥匙
  • 2026北京黄金回收避坑指南|全程可视化验金变现科普 - 生活时报
  • USB PD控制器寄存器深度解析:从端口控制到电源协商实战指南
  • 戴森球计划工厂蓝图完全指南:从零到精通的高效生产线解决方案
  • 终极指南:如何在3分钟内掌握macOS外接显示器亮度与音量控制
  • 参数网格一展开就上万组:运行前估算组合数量
  • 解决Phoenix Swagger常见问题:从配置错误到复杂Schema定义
  • 2026 武汉智工职业技术学校招生简章 全部专业介绍与联系老师电话 - 武汉中职最新信息发布
  • PHP线上商城系统开发实战:从LAMP架构到电商功能实现
  • Threepipe插件开发入门:从零创建自定义后期处理效果
  • TI TPS929120-Q1汽车LED驱动器评估板实操指南与避坑经验
  • 游戏ISO转CHD终极解决方案:用tochd释放你的硬盘空间,提升模拟体验
  • 告别插件管理烦恼:在Zotero中打造专属插件商店的完整方案