首页主机资讯Debian LNMP如何备份与恢复数据

Debian LNMP如何备份与恢复数据

时间2025-12-23 02:17:03发布访客分类主机资讯浏览237
导读:Debian LNMP 备份与恢复实操指南 一 备份范围与准备 备份范围建议覆盖:Nginx 配置、网站代码、数据库 MySQL/MariaDB、PHP-FPM 配置、以及可选的日志与系统镜像。 准备与约定: 备份目录:建议统一放在 /...

Debian LNMP 备份与恢复实操指南

一 备份范围与准备

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

二 手动备份步骤

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

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

  • 一键脚本示例(/root/backup_lnmp.sh):
#!/usr/bin/env bash
set -Eeuo pipefail

BACKUP_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) MySQL
if [ ${
#DBS_TO_BACKUP[@]}
     -eq 0 ];
     then
  mysqldump -u"$MYSQL_USER" -p"$MYSQL_PASS" --single-transaction --routines --triggers --all-databases \
    | gzip >
 "$BACKUP_DIR/mysql/all_databases_$DATE.sql.gz"
else
  for db in "${
DBS_TO_BACKUP[@]}
    ";
     do
    mysqldump -u"$MYSQL_USER" -p"$MYSQL_PASS" --single-transaction --routines --triggers "$db" \
      | gzip >
 "$BACKUP_DIR/mysql/${
db}
    _$DATE.sql.gz"
  done
fi

# 2) Nginx
tar -czf "$BACKUP_DIR/nginx/nginx_$DATE.tar.gz" -C "$NGINX_CONF_DIR" .

# 3) PHP-FPM
tar -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 -delete

echo "Backup finished at $DATE"
  • 定时任务(crontab -e):
    • 每天 02:00 备份数据库:0 2 * * * /root/backup_lnmp.sh
    • 如需分散负载,可将 Nginx/PHP/代码分拆到不同时间执行。

四 恢复步骤

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

五 策略与最佳实践

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

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


若转载请注明出处: Debian LNMP如何备份与恢复数据
本文地址: https://pptw.com/jishu/778084.html
Debian系统中如何管理LNMP用户 Debian系统中如何解决LNMP冲突

游客 回复需填写必要信息