linux

LNMP如何实现自动备份功能

小樊
44
2025-11-18 09:00:05
栏目: 编程语言

LNMP自动备份实现方案

一 备份范围与准备

二 一键脚本示例与说明

#!/usr/bin/env bash
set -Eeuo pipefail

# ========== 用户可配置 ==========
BACKUP_DIR="/backup"                 # 本地备份目录
MYSQL_USER="root"                    # 数据库用户
MYSQL_PASS="YourStrongPass!"        # 数据库密码(生产建议用 ~/.my.cnf)
DB_NAME="--all-databases"           # 备份全部库;如单库:DB_NAME="your_db"
NGINX_CONF="/etc/nginx"              # Nginx 配置目录
WEBSITE_ROOT="/var/www/html"         # 网站根目录
RETENTION_DAYS=7                     # 保留天数
REMOTE_USER="backup"                 # 远程备份用户(可选)
REMOTE_HOST="192.0.2.10"             # 远程主机(可选)
REMOTE_DIR="/remote/backup"          # 远程备份目录(可选)
USE_SSH=true                        # true: SCP/RSYNC;false: 禁用远程

# ========== 初始化 ==========
DATE=$(date +"%Y%m%d%H%M%S")
mkdir -p "$BACKUP_DIR"

# 日志函数
log() { echo "[$(date '+%F %T')] $*"; }

# ========== 备份 MySQL ==========
log "开始备份 MySQL ..."
MYSQL_FILE="$BACKUP_DIR/mysql_${DATE}.sql.gz"
mysqldump -u"$MYSQL_USER" -p"$MYSQL_PASS" $DB_NAME \
  --single-transaction --routines --triggers --hex-blob \
  | gzip > "$MYSQL_FILE"
[[ $? -eq 0 ]] && log "MySQL 备份完成: $MYSQL_FILE" \
  || { log "MySQL 备份失败"; exit 1; }

# ========== 备份网站文件 ==========
log "开始备份网站文件 ..."
WEB_FILE="$BACKUP_DIR/www_${DATE}.tar.gz"
tar -czf "$WEB_FILE" -C "$WEBSITE_ROOT" .
[[ $? -eq 0 ]] && log "网站文件备份完成: $WEB_FILE" \
  || { log "网站文件备份失败"; exit 1; }

# ========== 备份 Nginx 配置 ==========
log "开始备份 Nginx 配置 ..."
NGINX_FILE="$BACKUP_DIR/nginx_${DATE}.tar.gz"
tar -czf "$NGINX_FILE" -C "$(dirname "$NGINX_CONF")" "$(basename "$NGINX_CONF")"
[[ $? -eq 0 ]] && log "Nginx 配置备份完成: $NGINX_FILE" \
  || { log "Nginx 配置备份失败"; exit 1; }

# ========== 远程备份(可选) ==========
if [[ "$USE_SSH" == "true" ]]; then
  log "开始同步到远程 $REMOTE_HOST:$REMOTE_DIR ..."
  rsync -avz --remove-source-files "$BACKUP_DIR/" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/" \
    && log "远程同步完成" \
    || log "远程同步失败"
fi

# ========== 清理过期备份 ==========
log "清理 $RETENTION_DAYS 天前的备份 ..."
find "$BACKUP_DIR" -type f \( -name "*.sql.gz" -o -name "*.tar.gz" \) -mtime +$RETENTION_DAYS -delete
log "清理完成"

exit 0

三 定时任务与远程备份

四 校验与恢复演练

五 进阶与可选方案

0
看了该问题的人还看了