首页主机资讯LNMP如何实现自动备份功能

LNMP如何实现自动备份功能

时间2025-11-18 19:53:03发布访客分类主机资讯浏览345
导读:LNMP自动备份实现方案 一 备份范围与准备 备份范围建议覆盖:MySQL/MariaDB 数据库、网站根目录(PHP 文件)、Nginx 配置、以及可选的 SSL 证书与其他关键配置。 准备与目录规划: 创建本地备份目录并设置安全权限...

LNMP自动备份实现方案

一 备份范围与准备

  • 备份范围建议覆盖:MySQL/MariaDB 数据库网站根目录(PHP 文件)Nginx 配置、以及可选的 SSL 证书与其他关键配置。
  • 准备与目录规划:
    • 创建本地备份目录并设置安全权限,例如:/backup,建议权限为 700,仅 root 可访问。
    • 安装必要工具:mysqldump、tar、gzip、rsync、cron(Debian/Ubuntu 可执行:sudo apt-get install rsync mysqldump cron)。
    • 如采用远程备份,提前准备目标主机的 SSH 密钥登录FTP/SFTP 账号与目录。

二 一键脚本示例与说明

  • 功能:全量备份数据库(可改为单库)、网站文件与 Nginx 配置;自动压缩;按保留天数清理;可选 SCP/Rsync 远程同步。
  • 建议将脚本与备份目录置于 root 权限下运行,避免泄露数据库口令。
#!/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
  • 安全建议:
    • 避免在命令行直接写密码,生产环境推荐使用 ~/.my.cnf
      • 文件内容:
        [mysqldump]
        user=root
        password=YourStrongPass!
      • 权限:chmod 600 ~/.my.cnf
      • 脚本中调用:mysqldump --defaults-file=~/.my.cnf $DB_NAME …
    • 远程传输优先 SSH 密钥,禁用口令登录。

三 定时任务与远程备份

  • 添加定时任务(root 执行):crontab -e
    • 每天 02:00 执行全量备份:
      0 2 * * * /usr/bin/bash /root/backup.sh > > /var/log/backup.log 2> & 1
    • 每周日 03:00 仅备份数据库:
      0 3 * * 0 /usr/bin/bash /root/backup.sh --db-only > > /var/log/backup.log 2> & 1
  • 远程备份方式:
    • SCP:在脚本中使用 scp 将生成的压缩包复制到远程主机(适合一次性拷贝)。
    • Rsync:如示例脚本所示,增量同步、可自动删除已同步的本地文件(–remove-source-files),便于节省本地空间。

四 校验与恢复演练

  • 校验脚本:
    • 手动执行一次:/root/backup.sh,检查 /backup 是否生成 .sql.gz.tar.gz 文件,查看日志是否有报错。
    • 校验压缩包:gunzip -t mysql_.sql.gz;tar -tzf www_.tar.gz。
  • 恢复示例:
    • 数据库:gunzip < mysql_20251118.sql.gz | mysql -u"$MYSQL_USER" -p"$MYSQL_PASS"
    • 网站文件:tar -xzf www_20251118.tar.gz -C /var/www/html
    • Nginx 配置:tar -xzf nginx_20251118.tar.gz -C /etc

五 进阶与可选方案

  • 使用 LNMP 一键安装包自带的备份脚本:部分版本(如 lnmp1.6/tools/backup.sh)支持本地或 FTP 备份,可直接配置定时任务使用。
  • 使用 宝塔面板:提供图形化的网站与数据库备份设置,支持定时与远程存储,适合不熟悉命令行的用户。
  • 备份策略建议:
    • 关键业务采用 每日全量 + 更频繁增量(如结合 rsync 增量),并保留 7–30 天
    • 定期做 恢复演练,验证备份可用性与完整性;
    • 将备份目录与数据库、网站目录放在 不同磁盘/存储,降低单点故障风险。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: LNMP如何实现自动备份功能
本文地址: https://pptw.com/jishu/750450.html
Linux中FileZilla怎样备份数据 Ubuntu Overlay配置如何进行版本控制

游客 回复需填写必要信息