实现 Linux LAMP (Linux + Apache + MySQL/MariaDB + PHP) 环境的自动备份可以通过多种方式实现。下面我将介绍一个全面的解决方案。
我们将实现: 1. 数据库自动备份 2. 网站文件自动备份 3. 备份文件压缩和加密 4. 自动清理旧备份 5. 备份文件传输到远程服务器
创建 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
创建网站文件备份脚本 /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
使用 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
如果需要将备份文件传输到远程服务器,可以使用 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
为 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;
备份脚本应设置为仅 root 可读写:
chmod 700 /usr/local/bin/backup_*.sh
chown root:root /usr/local/bin/backup_*.sh
考虑使用 GPG 加密敏感备份文件。
定期验证备份文件是否可用: - 解压并检查网站文件 - 恢复测试数据库到临时环境
这个方案提供了 LAMP 环境的基本自动备份功能,您可以根据实际需求进行调整和扩展。