LNMP(Linux + Nginx + MySQL + PHP)环境的自动备份可以通过多种方式实现。以下是几种常见的自动备份方案:
#!/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 {} \;
使用crontab设置每天自动执行备份:
crontab -e
添加以下内容(每天凌晨3点执行备份):
0 3 * * * /path/to/backup_script.sh
#!/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)
# 安装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
#!/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 {} \;
# 安装
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
# 检查压缩包
tar -tzf backup_file.tar.gz
# 检查SQL文件
head -n 5 backup_file.sql
# 检查Borg备份
borg list /backup/borg-repo
# 解压备份
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/
# 使用rclone备份到云存储
rclone sync /backup remote:lnmp-backup
cd /etc/nginx
git init
git add .
git commit -m "Initial nginx config backup"
以上方案可以根据实际需求组合使用,建议至少实施本地备份+异地备份的双重保障。