Debian LNMP如何备份与恢复数据

作者:袖梨 2026-08-05

Debian LNMP 备份与恢复实操指南

Debian LNMP如何备份与恢复数据

一 备份范围与准备

  1. 备份范围建议覆盖:Nginx 配置、网站代码、数据库 MySQL/MariaDB、PHP-FPM 配置、以及可选的日志与系统镜像。
  2. 准备与约定:
    1. 备份目录:建议统一放在 /backup(示例命令将使用该路径,可按需调整)。
    2. PHP 版本:将示例中的 PHP_VERSION 替换为实际版本,如 8.2。
    3. 数据库凭据:准备好具有足够权限的数据库账号(如 root 或具备备份权限的专用账号)。
    4. 权限与所有权:恢复后注意恢复 文件属主/属组 与 权限,避免 Nginx/PHP-FPM 访问异常。

二 手动备份步骤

  1. 数据库备份(mysqldump)
    1. 备份单个库:mysqldump -u 用户名 -p 数据库名 > /backup/db_数据库名_$(date +%F).sql
    2. 备份全部库:mysqldump -u 用户名 -p --all-databases > /backup/db_all_$(date +%F).sql
    3. 建议压缩:gzip /backup/db_*.sql
  2. Nginx 配置备份
    1. 快速打包:tar -czf /backup/nginx_conf_$(date +%F).tar.gz -C /etc nginx
    2. 或单文件拷贝:cp -r /etc/nginx /backup/nginx-$(date +%F)
  3. PHP-FPM 配置备份
    1. 打包配置:tar -czf /backup/php_fpm_$(date +%F).tar.gz -C /etc/php PHP_VERSION/fpm
  4. 网站代码与数据
    1. 打包站点:tar -czf /backup/www_$(date +%F).tar.gz -C /var/www .
  5. 日志与可选系统镜像
    1. 日志归档:tar -czf /backup/logs_$(date +%F).tar.gz /var/log
    2. 系统镜像(谨慎):dd if=/dev/sda of=/backup/disk.img bs=4M(仅在离线/救援场景使用,操作前务必确认目标盘)。

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

  1. 一键脚本示例(/root/backup_lnmp.sh):
#!/usr/bin/env bashset -Eeuo pipefailBACKUP_DIR="/backup"DATE=$(date +%F_%H%M%S)MYSQL_USER="root"MYSQL_PASS="YourStrongPassword" # 建议使用 ~/.my.cnf 避免明文DBS_TO_BACKUP=("db1" "db2")# 留空则备份全部库NGINX_CONF_DIR="/etc/nginx"PHP_FPM_CONF_DIR="/etc/php/PHP_VERSION/fpm"WEB_ROOT="/var/www"LOG_DIR="/var/log"mkdir -p "$BACKUP_DIR/mysql" "$BACKUP_DIR/nginx" "$BACKUP_DIR/php-fpm" "$BACKUP_DIR/www" "$BACKUP_DIR/logs"# 1) MySQLif [ ${#DBS_TO_BACKUP[@]} -eq 0 ]; thenmysqldump -u"$MYSQL_USER" -p"$MYSQL_PASS" --single-transaction --routines --triggers --all-databases | gzip > "$BACKUP_DIR/mysql/all_databases_$DATE.sql.gz"elsefor db in "${DBS_TO_BACKUP[@]}"; domysqldump -u"$MYSQL_USER" -p"$MYSQL_PASS" --single-transaction --routines --triggers "$db" | gzip > "$BACKUP_DIR/mysql/${db}_$DATE.sql.gz"donefi# 2) Nginxtar -czf "$BACKUP_DIR/nginx/nginx_$DATE.tar.gz" -C "$NGINX_CONF_DIR" .# 3) PHP-FPMtar -czf "$BACKUP_DIR/php-fpm/php-fpm_$DATE.tar.gz" -C "$PHP_FPM_CONF_DIR" .# 4) 网站代码tar -czf "$BACKUP_DIR/www/www_$DATE.tar.gz" -C "$WEB_ROOT" .# 5) 日志tar -czf "$BACKUP_DIR/logs/logs_$DATE.tar.gz" -C "$LOG_DIR" .# 6) 清理 7 天前find "$BACKUP_DIR" -type f -name "*.gz" -mtime +7 -deleteecho "Backup finished at $DATE"
  1. 定时任务(crontab -e):
    1. 每天 02:00 备份数据库:0 2 * * * /root/backup_lnmp.sh
    2. 如需分散负载,可将 Nginx/PHP/代码分拆到不同时间执行。

四 恢复步骤

  1. 数据库恢复
    1. 全部库:gunzip < /backup/mysql/all_databases_YYYY-MM-DD_HHMMSS.sql.gz | mysql -u 用户名 -p
    2. 单库:gunzip < /backup/mysql/db1_YYYY-MM-DD_HHMMSS.sql.gz | mysql -u 用户名 -p db1
  2. Nginx 配置恢复
    1. 解压覆盖:tar -xzf /backup/nginx/nginx_YYYY-MM-DD_HHMMSS.tar.gz -C /etc
    2. 校验并生效:nginx -t && systemctl reload nginx
  3. PHP-FPM 配置恢复
    1. 解压覆盖:tar -xzf /backup/php-fpm/php-fpm_YYYY-MM-DD_HHMMSS.tar.gz -C /etc/php/PHP_VERSION/
    2. 重启服务:systemctl restart phpPHP_VERSION-fpm
  4. 网站代码恢复
    1. 解压覆盖:tar -xzf /backup/www/www_YYYY-MM-DD_HHMMSS.tar.gz -C /var/www
    2. 修复权限(示例):chown -R www-data:www-data /var/www,必要时调整目录权限
  5. 日志与系统镜像
    1. 日志查看:tail -f /var/log/nginx/error.log 或 /var/log/mysql/error.log
    2. 镜像恢复(极端灾难场景):dd if=/backup/disk.img of=/dev/sda bs=4M(务必离线操作并确认目标盘)。

五 策略与最佳实践

  1. 备份策略
    1. 频率:建议数据库每日备份,配置与代码每日或每周;关键业务考虑多副本。
    2. 保留:至少保留7天,重要业务可保留30天或更长。
    3. 异地/云端:采用本地 + 远程/云端多级备份,提升容灾能力。
  2. 安全与合规
    1. 数据库凭据避免明文写在脚本中,推荐使用 ~/.my.cnf 或凭据管理工具。
    2. 备份文件加密与访问控制,传输使用 scp/rsync over SSH。
  3. 可观测与演练
    1. 为备份脚本增加日志记录与失败告警,定期做恢复演练验证可用性。

相关文章

精彩推荐