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

如何在LNMP中实现自动备份

备份 backup 文件 DIR 647    来源:    2025-05-05

LNMP环境自动备份方案

在LNMP(Linux+Nginx+MySQL+PHP)环境中实现自动备份是保障数据安全的重要措施。以下是完整的自动备份解决方案:

一、备份内容规划

需要备份的主要内容包括: 1. MySQL数据库 2. 网站程序文件 3. Nginx配置文件 4. PHP配置文件

二、具体实现方案

1. MySQL数据库备份

#!/bin/bash
# 数据库备份脚本 /root/scripts/mysql_backup.sh

# 配置信息
DB_USER="root"
DB_PASS="your_password"
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
KEEP_DAYS=7

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

# 获取所有数据库列表
DATABASES=$(mysql -u$DB_USER -p$DB_PASS -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|mysql)")

# 备份每个数据库
for db in $DATABASES; do
    mysqldump -u$DB_USER -p$DB_PASS --single-transaction --routines --triggers $db | gzip > "$BACKUP_DIR/${db}_${DATE}.sql.gz"
done

# 删除过期备份
find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +$KEEP_DAYS -exec rm -f {} \;

2. 网站文件备份

#!/bin/bash
# 网站文件备份脚本 /root/scripts/web_backup.sh

# 配置信息
WEB_DIR="/var/www"
BACKUP_DIR="/backup/web"
DATE=$(date +%Y%m%d_%H%M%S)
KEEP_DAYS=7

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

# 备份网站文件
tar -czf "$BACKUP_DIR/web_${DATE}.tar.gz" $WEB_DIR

# 删除过期备份
find $BACKUP_DIR -type f -name "*.tar.gz" -mtime +$KEEP_DAYS -exec rm -f {} \;

3. 配置文件备份

#!/bin/bash
# 配置文件备份脚本 /root/scripts/config_backup.sh

# 配置信息
CONFIG_FILES="/etc/nginx /etc/php /etc/mysql"
BACKUP_DIR="/backup/config"
DATE=$(date +%Y%m%d_%H%M%S)
KEEP_DAYS=30

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

# 备份配置文件
tar -czf "$BACKUP_DIR/config_${DATE}.tar.gz" $CONFIG_FILES

# 删除过期备份
find $BACKUP_DIR -type f -name "*.tar.gz" -mtime +$KEEP_DAYS -exec rm -f {} \;

4. 设置定时任务

使用crontab设置自动执行:

# 编辑crontab
crontab -e

# 添加以下内容(示例为每天凌晨3点执行备份)
0 3 * * * /bin/bash /root/scripts/mysql_backup.sh
30 3 * * * /bin/bash /root/scripts/web_backup.sh
45 3 * * * /bin/bash /root/scripts/config_backup.sh

三、高级备份方案

1. 远程备份(使用rsync)

#!/bin/bash
# 远程备份脚本 /root/scripts/remote_backup.sh

REMOTE_USER="backupuser"
REMOTE_HOST="backup.server.com"
REMOTE_DIR="/backups/$(hostname)"
LOCAL_DIR="/backup"

rsync -avz --delete -e ssh $LOCAL_DIR/ $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR

2. 加密备份(使用openssl)

# 加密备份示例(在原有备份命令后添加)
openssl enc -aes-256-cbc -salt -in original_backup.tar.gz -out encrypted_backup.tar.gz.enc -pass pass:your_password

# 解密命令
openssl enc -d -aes-256-cbc -in encrypted_backup.tar.gz.enc -out original_backup.tar.gz -pass pass:your_password

3. 使用Borg Backup实现增量备份

# 安装Borg
apt install borgbackup  # Debian/Ubuntu
yum install borgbackup  # CentOS/RHEL

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

# 创建备份
borg create --stats --progress /backup/borg-repo::'{hostname}-{now}' /var/www /etc/nginx /etc/mysql

# 自动清理旧备份
borg prune --keep-daily=7 --keep-weekly=4 --keep-monthly=12 /backup/borg-repo

四、备份验证与监控

  1. 添加备份日志记录
  2. 设置备份成功/失败通知(邮件或短信)
  3. 定期手动恢复测试备份文件有效性

五、安全注意事项

  1. 备份脚本应设置适当权限(如600)
  2. 避免在脚本中硬编码密码,可使用配置文件或环境变量
  3. 远程备份应使用SSH密钥认证而非密码
  4. 加密备份的密码应妥善保管

通过以上方案,您可以建立一个可靠、自动化的LNMP环境备份系统,确保在发生意外时能够快速恢复服务。