温馨提示×

Debian LNMP如何进行备份与恢复

小樊
38
2025-11-29 01:34:51
栏目: 智能运维

Debian LNMP 备份与恢复实操指南

一 备份范围与准备

  • 备份范围建议覆盖:Nginx 配置网站文件MariaDB/MySQL 数据库PHP-FPM 配置、可选的日志与证书
  • 准备与约定:
    • 备份目录建议统一,如:/opt/backup/,并按天创建子目录。
    • 数据库凭据建议使用**~/.my.cnf**方式避免明文密码出现在命令行历史。
    • 为安全与一致性,数据库备份时建议短暂停止写入或使用事务一致性选项(如 InnoDB)。

二 手动备份步骤

    1. Nginx 配置
    • 建议先校验配置再备份,减少因配置错误导致服务异常的风险:
      • sudo nginx -t
    • 备份命令示例:
      • sudo cp -a /etc/nginx /opt/backup/nginx-$(date +%F)
    1. 网站文件
    • 常见路径为:/var/www//var/www/html,按需调整:
      • sudo cp -a /var/www /opt/backup/www-$(date +%F)
    1. MariaDB/MySQL 数据库
    • 单库备份(推荐):
      • mysqldump -u 用户名 -p 数据库名 > /opt/backup/db_数据库名-$(date +%F).sql
    • 全库备份:
      • mysqldump -u root -p --all-databases > /opt/backup/full_db-$(date +%F).sql
    • 压缩备份(可选):
      • gzip /opt/backup/*.sql
    1. PHP-FPM 配置
    • 备份当前 PHP 版本的 FPM 配置与池配置(请将 8.2 替换为你的实际版本):
      • sudo cp -a /etc/php/8.2/fpm /opt/backup/php-fpm-$(date +%F)
    1. 证书与日志(可选)
    • 证书:sudo cp -a /etc/letsencrypt /opt/backup/letsencrypt-$(date +%F)
    • 日志:sudo tar czf /opt/backup/logs-$(date +%F).tar.gz -C /var/log .
    1. 使用 .my.cnf 安全存放凭据(推荐)
    • 创建文件:~/.my.cnf
      • [client]
        • user=root
        • password=你的密码
    • 赋权:chmod 600 ~/.my.cnf
    • 之后可直接执行:mysqldump --all-databases > backup.sql(无需在命令行暴露密码)。

三 自动备份脚本与定时任务

    1. 数据库备份脚本(/opt/backup/backup_mysql.sh)
    • 示例(使用 ~/.my.cnf,无需在命令行写密码):
      • #!/bin/bash
        • BACKUP_DIR=“/opt/backup/mysql”
        • DATE=$(date +“%Y%m%d%H%M%S”)
        • mkdir -p “$BACKUP_DIR”
        • mysqldump --single-transaction --routines --triggers --default-character-set=utf8mb4 --all-databases > “$BACKUP_DIR/full-$DATE.sql”
        • gzip “$BACKUP_DIR/full-$DATE.sql”
        • find “$BACKUP_DIR” -type f -name “*.sql.gz” -mtime +30 -delete
        • echo “[$DATE] MySQL backup finished.” >> “$BACKUP_DIR/backup.log”
    • 赋权:chmod +x /opt/backup/backup_mysql.sh
    1. Nginx 配置备份脚本(/opt/backup/backup_nginx.sh)
    • #!/bin/bash
      • BACKUP_DIR=“/opt/backup/nginx”
      • DATE=$(date +“%Y%m%d%H%M%S”)
      • mkdir -p “$BACKUP_DIR”
      • cp -a /etc/nginx “$BACKUP_DIR/nginx-$DATE”
      • gzip “$BACKUP_DIR/nginx-$DATE”
      • find “$BACKUP_DIR” -type f -name “nginx-*.tar.gz” -mtime +30 -delete
      • echo “[$DATE] Nginx config backup finished.” >> “$BACKUP_DIR/backup.log”
    • 赋权:chmod +x /opt/backup/backup_nginx.sh
    1. 网站文件备份脚本(/opt/backup/backup_www.sh)
    • #!/bin/bash
      • BACKUP_DIR=“/opt/backup/www”
      • DATE=$(date +“%Y%m%d%H%M%S”)
      • mkdir -p “$BACKUP_DIR”
      • tar czf “$BACKUP_DIR/www-$DATE.tar.gz” -C /var/www .
      • find “$BACKUP_DIR” -type f -name “www-*.tar.gz” -mtime +30 -delete
      • echo “[$DATE] WWW backup finished.” >> “$BACKUP_DIR/backup.log”
    • 赋权:chmod +x /opt/backup/backup_www.sh
    1. 定时任务(crontab -e)
    • 每天 02:00 数据库、03:00 Nginx、04:00 网站文件:
      • 0 2 * * * /opt/backup/backup_mysql.sh
      • 0 3 * * * /opt/backup/backup_nginx.sh
      • 0 4 * * * /opt/backup/backup_www.sh
    1. 说明
    • 保留策略示例为30 天,可按需调整为 7 天或更长。
    • 建议在脚本中加入日志与错误检查,便于排障与审计。

四 恢复步骤

    1. 恢复 Nginx 配置
    • 建议先备份当前配置,再覆盖恢复:
      • sudo cp -a /etc/nginx /etc/nginx.bak-$(date +%F)
      • sudo rm -rf /etc/nginx/*
      • sudo cp -a /opt/backup/nginx-YYYY-MM-DD/* /etc/nginx/
      • sudo nginx -t && sudo systemctl reload nginx
    1. 恢复网站文件
    • 视情况先备份现有目录:
      • sudo cp -a /var/www /var/www.bak-$(date +%F)
      • sudo rm -rf /var/www/*
      • sudo tar xzf /opt/backup/www-YYYY-MM-DD.tar.gz -C /
    1. 恢复 MariaDB/MySQL
    • 建议先启动数据库服务并运行安全初始化(如首次恢复):
      • sudo systemctl start mariadb
      • sudo mysql_secure_installation
    • 恢复全库或单库:
      • 全库:mysql -u root -p < /opt/backup/mysql/full-YYYYMMDDHHMMSS.sql.gz
      • 如为压缩包:zcat /opt/backup/mysql/full-YYYYMMDDHHMMSS.sql.gz | mysql -u root -p
      • 单库:mysql -u 用户名 -p 数据库名 < /opt/backup/mysql/db_数据库名-YYYY-MM-DD.sql
    1. 恢复 PHP-FPM 配置
    • 备份当前配置后覆盖恢复(将 8.2 替换为你的实际版本):
      • sudo cp -a /etc/php/8.2/fpm /etc/php/8.2/fpm.bak-$(date +%F)
      • sudo rm -rf /etc/php/8.2/fpm/*
      • sudo cp -a /opt/backup/php-fpm-YYYY-MM-DD/* /etc/php/8.2/fpm/
      • sudo systemctl restart php8.2-fpm
    1. 验证
    • 检查服务状态:
      • sudo systemctl status nginx mariadb php8.2-fpm
    • 查看错误日志定位问题:
      • sudo tail -n50 /var/log/nginx/error.log
      • sudo tail -n50 /var/log/mysql/error.log。

五 注意事项与最佳实践

  • 一致性优先:数据库备份使用**–single-transaction**(InnoDB)避免锁表;大型数据库可分库/分表备份。
  • 保留策略:至少保留7–30 天;关键业务建议增加异地/离线副本。
  • 安全性:备份文件含敏感信息,设置600权限,存放于受限目录;传输到外部存储时使用加密
  • 版本与路径:恢复时确保 DebianNginxMariaDB/MySQLPHP 版本与路径一致;如版本不一致,先小范围验证兼容性。
  • 定期演练:定期在测试环境进行恢复演练,校验备份可用性与完整性。
  • 监控与告警:为备份任务添加日志与告警,一旦出现失败及时通知并排查。

0