Debian LNMP如何备份与恢复数据
导读:Debian LNMP 备份与恢复实操指南 一 备份范围与准备 备份范围建议覆盖:Nginx 配置、网站代码、数据库 MySQL/MariaDB、PHP-FPM 配置、以及可选的日志与系统镜像。 准备与约定: 备份目录:建议统一放在 /...
Debian LNMP 备份与恢复实操指南
一 备份范围与准备
- 备份范围建议覆盖:Nginx 配置、网站代码、数据库 MySQL/MariaDB、PHP-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
