插件窝 干货文章 LNMP如何实现自动备份

LNMP如何实现自动备份

备份 BACKUP MySQL DATE 399    来源:    2025-05-05

LNMP环境自动备份方案

LNMP(Linux + Nginx + MySQL + PHP)环境的自动备份可以通过多种方式实现。以下是几种常见的自动备份方案:

一、使用Shell脚本实现自动备份

1. 基础备份脚本

#!/bin/bash
# 定义备份目录和文件名
BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d)
MYSQL_USER="root"
MYSQL_PASS="yourpassword"

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

# 备份Nginx配置
cp -r /etc/nginx $BACKUP_DIR/$DATE/nginx

# 备份PHP配置
cp -r /etc/php $BACKUP_DIR/$DATE/php

# 备份网站文件
cp -r /var/www $BACKUP_DIR/$DATE/www

# 备份MySQL数据库
mysqldump -u$MYSQL_USER -p$MYSQL_PASS --all-databases > $BACKUP_DIR/$DATE/mysql_all.sql

# 压缩备份文件
tar -zcvf $BACKUP_DIR/lnmp_backup_$DATE.tar.gz $BACKUP_DIR/$DATE

# 删除临时文件
rm -rf $BACKUP_DIR/$DATE

# 删除7天前的备份
find $BACKUP_DIR -name "*.tar.gz" -type f -mtime +7 -exec rm -f {} \;

2. 设置定时任务

使用crontab设置每天自动执行备份:

crontab -e

添加以下内容(每天凌晨3点执行备份):

0 3 * * * /path/to/backup_script.sh

二、使用自动化工具

1. 使用rsync实现增量备份

#!/bin/bash
# 本地备份目录
LOCAL_BACKUP="/backup/daily"
# 远程备份服务器
REMOTE_BACKUP="user@backup-server:/backup/lnmp"

# 同步网站文件
rsync -avz --delete /var/www $LOCAL_BACKUP/www
# 同步MySQL备份
mysqldump -uroot -pyourpassword --all-databases > $LOCAL_BACKUP/mysql_all.sql
# 同步配置
rsync -avz --delete /etc/nginx $LOCAL_BACKUP/nginx
rsync -avz --delete /etc/php $LOCAL_BACKUP/php

# 同步到远程服务器
rsync -avz --delete $LOCAL_BACKUP $REMOTE_BACKUP/$(date +%Y%m%d)

2. 使用BorgBackup实现去重备份

# 安装BorgBackup
apt install borgbackup

# 初始化备份仓库
borg init --encryption=repokey /backup/borg-repo

# 创建备份脚本
#!/bin/bash
export BORG_PASSPHRASE='yourpassphrase'
REPOSITORY="/backup/borg-repo"
borg create --stats --progress $REPOSITORY::lnmp-{now:%Y-%m-%d} \
    /var/www \
    /etc/nginx \
    /etc/php \
    /etc/mysql

# 删除超过30天的备份
borg prune -v --list --keep-daily=7 --keep-weekly=4 --keep-monthly=6 $REPOSITORY

三、数据库专用备份方案

1. MySQL自动备份

#!/bin/bash
USER="root"
PASSWORD="yourpassword"
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d)

# 备份所有数据库
mysqldump -u$USER -p$PASSWORD --all-databases --single-transaction > $BACKUP_DIR/full_backup_$DATE.sql

# 使用gzip压缩
gzip $BACKUP_DIR/full_backup_$DATE.sql

# 保留最近7天的备份
find $BACKUP_DIR -name "*.sql.gz" -type f -mtime +7 -exec rm -f {} \;

2. 使用Percona XtraBackup实现热备份(适用于大型数据库)

# 安装
apt install percona-xtrabackup

# 完整备份
innobackupex --user=root --password=yourpassword /backup/mysql/

# 增量备份
innobackupex --user=root --password=yourpassword --incremental /backup/mysql/ --incremental-basedir=/backup/mysql/last_full_backup

四、备份验证与恢复

1. 验证备份完整性

# 检查压缩包
tar -tzf backup_file.tar.gz

# 检查SQL文件
head -n 5 backup_file.sql

# 检查Borg备份
borg list /backup/borg-repo

2. 恢复示例

# 解压备份
tar -xzf lnmp_backup_20230101.tar.gz -C /tmp/restore

# 恢复MySQL
mysql -uroot -p < /tmp/restore/mysql_all.sql

# 恢复配置文件
cp -r /tmp/restore/nginx /etc/
cp -r /tmp/restore/php /etc/

# 恢复网站文件
cp -r /tmp/restore/www /var/

五、高级方案

1. 使用云存储备份

# 使用rclone备份到云存储
rclone sync /backup remote:lnmp-backup

2. 使用Git管理配置文件

cd /etc/nginx
git init
git add .
git commit -m "Initial nginx config backup"

注意事项

  1. 备份脚本应设置适当权限(如600),避免密码泄露
  2. 定期测试备份恢复流程
  3. 重要数据建议采用3-2-1备份策略:
    • 3份备份
    • 2种不同介质
    • 1份异地备份
  4. 监控备份任务执行情况
  5. 考虑备份加密,特别是包含敏感数据的备份

以上方案可以根据实际需求组合使用,建议至少实施本地备份+异地备份的双重保障。