在 Debian 系统上备份 LNMP(Linux + Nginx + MySQL/MariaDB + PHP) 一般包含 网站文件、数据库、Nginx/PHP 配置、SSL 证书 等。下面给你一套完整、可操作的备份方案,从简单到规范都有。
| 类型 | 路径/内容 |
|---|---|
| 网站文件 | /var/www/ |
| Nginx 配置 | /etc/nginx/ |
| PHP 配置 | /etc/php/ |
| MySQL/MariaDB 数据 | 数据库本身 |
| SSL 证书 | /etc/letsencrypt/ |
| 系统服务配置 | /etc/systemd/(可选) |
| 定时任务 | /etc/cron.d/、crontab -l |
mkdir -p /backup/lnmp-$(date +%F)
cd /backup/lnmp-$(date +%F)
tar czf www.tar.gz /var/www
tar czf nginx.tar.gz /etc/nginx
tar czf php.tar.gz /etc/php
mysqldump -u root -p --all-databases > mysql_all.sql
或单库:
mysqldump -u root -p dbname > dbname.sql
gzip mysql_all.sql
tar czf letsencrypt.tar.gz /etc/letsencrypt
⚠️ 注意:
crontab -l > crontab.txt
#!/bin/bash
DATE=$(date +%F)
DIR=/backup/lnmp-$DATE
mkdir -p $DIR
tar czf $DIR/www.tar.gz /var/www
tar czf $DIR/nginx.tar.gz /etc/nginx
tar czf $DIR/php.tar.gz /etc/php
tar czf $DIR/letsencrypt.tar.gz /etc/letsencrypt
mysqldump -u root -p'数据库密码' --all-databases | gzip > $DIR/mysql_all.sql.gz
crontab -l > $DIR/crontab.txt
echo "LNMP backup done: $DIR"
赋予执行权限:
chmod +x /root/lnmp_backup.sh
crontab -e
每天凌晨 2 点执行:
0 2 * * * /root/lnmp_backup.sh >> /var/log/lnmp_backup.log 2>&1
tar xzf www.tar.gz -C /
tar xzf nginx.tar.gz -C /
systemctl restart nginx
gunzip < mysql_all.sql.gz | mysql -u root -p
tar xzf letsencrypt.tar.gz -C /
✅ 使用 rsync 同步到远程服务器
✅ 使用 Borg / Restic 做增量备份
✅ 数据库使用 xtrabackup(大库)
✅ 备份完成后 校验文件完整性
❌ 直接复制 /var/lib/mysql(数据库可能损坏)
❌ 忘记备份 Nginx 的 sites-enabled
❌ 权限问题导致恢复后网站 403/500
你可以告诉我:
我可以给你 完全定制版备份方案 ✅