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

Linux LAMP如何实现自动备份

备份 backup 文件 MySQL 613    来源:    2025-05-04

Linux LAMP 环境自动备份方案

实现 Linux LAMP (Linux + Apache + MySQL/MariaDB + PHP) 环境的自动备份可以通过多种方式实现。下面我将介绍一个全面的解决方案。

方案概述

我们将实现: 1. 数据库自动备份 2. 网站文件自动备份 3. 备份文件压缩和加密 4. 自动清理旧备份 5. 备份文件传输到远程服务器

1. 数据库备份脚本

创建 MySQL/MariaDB 备份脚本 /usr/local/bin/backup_mysql.sh

#!/bin/bash

# MySQL 数据库备份脚本

# 配置参数
BACKUP_DIR="/backup/mysql"
MYSQL_USER="backup_user"
MYSQL_PASSWORD="your_password"
DATABASES="all"  # 或指定数据库名,如 "db1 db2"
KEEP_DAYS=30

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

# 获取当前日期
DATE=$(date +%Y-%m-%d_%H-%M-%S)

# 备份所有数据库或指定数据库
if [ "$DATABASES" = "all" ]; then
    FILENAME="$BACKUP_DIR/all-databases-$DATE.sql.gz"
    mysqldump --all-databases --single-transaction --quick \
              -u$MYSQL_USER -p$MYSQL_PASSWORD | gzip > $FILENAME
else
    for DB in $DATABASES; do
        FILENAME="$BACKUP_DIR/$DB-$DATE.sql.gz"
        mysqldump --single-transaction --quick -u$MYSQL_USER \
                 -p$MYSQL_PASSWORD $DB | gzip > $FILENAME
    done
fi

# 加密备份文件(可选)
# 需要提前安装 gpg 并配置密钥
# gpg --yes --batch --passphrase="your_passphrase" -c $FILENAME
# rm $FILENAME

# 删除过期备份
find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +$KEEP_DAYS -delete

2. 网站文件备份脚本

创建网站文件备份脚本 /usr/local/bin/backup_web.sh

#!/bin/bash

# 网站文件备份脚本

# 配置参数
BACKUP_DIR="/backup/web"
WEB_ROOT="/var/www/html"
KEEP_DAYS=30

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

# 获取当前日期
DATE=$(date +%Y-%m-%d_%H-%M-%S)

# 备份网站文件
FILENAME="$BACKUP_DIR/web-files-$DATE.tar.gz"
tar -czf $FILENAME $WEB_ROOT

# 加密备份文件(可选)
# gpg --yes --batch --passphrase="your_passphrase" -c $FILENAME
# rm $FILENAME

# 删除过期备份
find $BACKUP_DIR -type f -name "*.tar.gz" -mtime +$KEEP_DAYS -delete

3. 设置定时任务

使用 crontab 设置自动执行:

# 编辑 root 用户的 crontab
sudo crontab -e

添加以下内容(根据需求调整时间):

# 每天凌晨 2 点备份数据库
0 2 * * * /usr/local/bin/backup_mysql.sh

# 每周日凌晨 3 点备份网站文件
0 3 * * 0 /usr/local/bin/backup_web.sh

4. 备份文件传输到远程服务器(可选)

如果需要将备份文件传输到远程服务器,可以使用 rsync 或 scp。创建脚本 /usr/local/bin/transfer_backups.sh

#!/bin/bash

# 远程服务器配置
REMOTE_USER="backup_user"
REMOTE_HOST="backup.example.com"
REMOTE_DIR="/backups/lamp-server"

# 传输备份文件
rsync -avz --delete /backup/ $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR

# 或者使用 scp
# scp -r /backup/* $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR

然后添加到 crontab:

# 每天凌晨 4 点传输备份文件
0 4 * * * /usr/local/bin/transfer_backups.sh

5. 安全注意事项

  1. 为 MySQL 备份创建专用用户,只授予必要权限:

    CREATE USER 'backup_user'@'localhost' IDENTIFIED BY 'strong_password';
    GRANT SELECT, SHOW VIEW, RELOAD, REPLICATION CLIENT, EVENT, TRIGGER, LOCK TABLES ON *.* TO 'backup_user'@'localhost';
    FLUSH PRIVILEGES;
    
  2. 备份脚本应设置为仅 root 可读写:

    chmod 700 /usr/local/bin/backup_*.sh
    chown root:root /usr/local/bin/backup_*.sh
    
  3. 考虑使用 GPG 加密敏感备份文件。

6. 备份验证

定期验证备份文件是否可用: - 解压并检查网站文件 - 恢复测试数据库到临时环境

7. 扩展建议

  1. 使用备份工具如 Bacula, Duplicity 或 BorgBackup 实现更专业的备份方案
  2. 考虑使用云存储服务(AWS S3, Google Cloud Storage 等)作为备份目的地
  3. 实现监控机制,确保备份任务成功执行

这个方案提供了 LAMP 环境的基本自动备份功能,您可以根据实际需求进行调整和扩展。