插件窝 干货文章 LNMP服务器备份与恢复

LNMP服务器备份与恢复

备份 backup 数据库 文件 693    来源:    2025-05-07

LNMP服务器备份与恢复方案

一、备份策略

1. 备份内容

  • 网站数据:网站根目录(通常为/home/wwwroot/)
  • 数据库:MySQL/MariaDB数据
  • 配置文件:Nginx、PHP、MySQL等配置文件
  • SSL证书:如果有的话
  • 日志文件:可选备份

2. 备份频率

  • 生产环境:每日全量备份 + 实时增量备份
  • 测试环境:每周全量备份
  • 重要数据:建议多重备份(本地+异地+云存储)

二、备份方法

1. 网站文件备份

# 全量备份网站目录
tar -czpf /backup/web_$(date +%Y%m%d).tar.gz /home/wwwroot/

# 增量备份(需要先安装rsync)
rsync -avz --delete /home/wwwroot/ /backup/web_incremental/

2. 数据库备份

# 单数据库备份
mysqldump -u用户名 -p密码 数据库名 > /backup/db_数据库名_$(date +%Y%m%d).sql

# 全库备份
mysqldump -u用户名 -p密码 --all-databases > /backup/db_all_$(date +%Y%m%d).sql

# 压缩备份
mysqldump -u用户名 -p密码 数据库名 | gzip > /backup/db_数据库名_$(date +%Y%m%d).sql.gz

3. 配置文件备份

# Nginx配置
tar -czpf /backup/nginx_conf_$(date +%Y%m%d).tar.gz /etc/nginx/

# PHP配置
tar -czpf /backup/php_conf_$(date +%Y%m%d).tar.gz /etc/php/

# MySQL配置
cp /etc/my.cnf /backup/my.cnf_$(date +%Y%m%d)

三、自动化备份脚本

创建 /usr/local/bin/lnmp_backup.sh 文件:

#!/bin/bash
# LNMP全量备份脚本

# 定义变量
BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d)
MYSQL_USER="root"
MYSQL_PASS="yourpassword"

# 创建备份目录
mkdir -p $BACKUP_DIR/$DATE

# 备份网站文件
echo "开始备份网站文件..."
tar -czpf $BACKUP_DIR/$DATE/web.tar.gz /home/wwwroot/

# 备份数据库
echo "开始备份数据库..."
mysqldump -u$MYSQL_USER -p$MYSQL_PASS --all-databases > $BACKUP_DIR/$DATE/db_all.sql
gzip $BACKUP_DIR/$DATE/db_all.sql

# 备份配置文件
echo "开始备份配置文件..."
tar -czpf $BACKUP_DIR/$DATE/nginx_conf.tar.gz /etc/nginx/
tar -czpf $BACKUP_DIR/$DATE/php_conf.tar.gz /etc/php/
cp /etc/my.cnf $BACKUP_DIR/$DATE/

# 备份完成
echo "备份完成,备份文件存放在 $BACKUP_DIR/$DATE/"

设置定时任务(crontab -e):

# 每天凌晨3点执行备份
0 3 * * * /bin/bash /usr/local/bin/lnmp_backup.sh

四、恢复方法

1. 网站文件恢复

# 解压备份文件到临时目录
tar -xzf /backup/web_20230101.tar.gz -C /tmp/

# 恢复文件
rsync -avz /tmp/home/wwwroot/ /home/wwwroot/

# 设置权限
chown -R www:www /home/wwwroot/

2. 数据库恢复

# 单数据库恢复
mysql -u用户名 -p密码 数据库名 < /backup/db_数据库名_20230101.sql

# 全库恢复
mysql -u用户名 -p密码 < /backup/db_all_20230101.sql

# 压缩备份恢复
gunzip < /backup/db_数据库名_20230101.sql.gz | mysql -u用户名 -p密码 数据库名

3. 配置文件恢复

# Nginx配置恢复
tar -xzf /backup/nginx_conf_20230101.tar.gz -C /

# PHP配置恢复
tar -xzf /backup/php_conf_20230101.tar.gz -C /

# MySQL配置恢复
cp /backup/my.cnf_20230101 /etc/my.cnf

# 重启服务
systemctl restart nginx
systemctl restart php-fpm
systemctl restart mysql

五、备份验证与维护

  1. 定期验证备份:每月至少恢复一次备份到测试环境验证完整性
  2. 备份文件清理:保留最近7天备份,每月保留1份完整备份
  3. 异地备份:使用rsync/scp将备份同步到其他服务器或云存储
  4. 监控备份任务:设置邮件通知或监控备份任务执行情况

六、高级备份方案

  1. 使用Percona XtraBackup(适用于大型MySQL数据库)
# 安装
yum install percona-xtrabackup

# 全量备份
innobackupex --user=root --password=yourpassword /backup/mysql/
  1. 使用Borg Backup(支持去重和加密)
# 初始化仓库
borg init --encryption=repokey /backup/borg_repo

# 创建备份
borg create /backup/borg_repo::lnmp-{now} /home/wwwroot /etc/nginx /etc/php
  1. 云存储备份(AWS S3、阿里云OSS等)
# 使用s3cmd同步备份到S3
s3cmd sync /backup/ s3://your-bucket/lnmp-backup/

通过以上方案,您可以确保LNMP服务器的数据安全,在出现故障时能够快速恢复服务。