mysqldump
、xtrabackup
(适用于大型数据库)rsync
、tar
、BorgBackup
cron
定时任务、Bacula
、Duplicity
# 全量备份
mysqldump -u root -p --all-databases --single-transaction --master-data=2 --flush-logs > /backup/mysql/full_backup_$(date +%Y%m%d).sql
# 二进制日志备份(实时)
mysql -u root -p -e "FLUSH LOGS;"
cp /var/lib/mysql/mysql-bin.* /backup/mysql/binlogs/
# 备份配置文件和网站文件
tar -czvf /backup/nginx/nginx_conf_$(date +%Y%m%d).tar.gz /etc/nginx/ /var/www/html/
# 备份PHP配置和扩展
tar -czvf /backup/php/php_conf_$(date +%Y%m%d).tar.gz /etc/php/ /usr/lib/php/modules/
#!/bin/bash
# 定义备份目录
BACKUP_DIR="/backup/lnmp"
DATE=$(date +%Y%m%d)
# 创建备份目录
mkdir -p $BACKUP_DIR/{mysql,nginx,php,www}
# MySQL备份
mysqldump -u root -pYOURPASSWORD --all-databases --single-transaction > $BACKUP_DIR/mysql/full_$DATE.sql
# Nginx备份
tar -czf $BACKUP_DIR/nginx/nginx_$DATE.tar.gz /etc/nginx
# PHP备份
tar -czf $BACKUP_DIR/php/php_$DATE.tar.gz /etc/php
# 网站文件备份
rsync -a --delete /var/www/html/ $BACKUP_DIR/www/
# 保留最近7天备份
find $BACKUP_DIR -type f -mtime +7 -exec rm {} \;
# 全量恢复
mysql -u root -p < /backup/mysql/full_backup_20230101.sql
# 基于时间点恢复(需要二进制日志)
mysqlbinlog --start-datetime="2023-01-01 12:00:00" --stop-datetime="2023-01-01 13:00:00" /backup/mysql/binlogs/mysql-bin.000001 | mysql -u root -p
# 解压备份文件到原目录
tar -xzvf /backup/nginx/nginx_conf_20230101.tar.gz -C /
nginx -t # 测试配置
systemctl restart nginx
tar -xzvf /backup/php/php_conf_20230101.tar.gz -C /
systemctl restart php-fpm
rsync -a --delete /backup/www/ /var/www/html/
chown -R www-data:www-data /var/www/html/
# 全量备份
xtrabackup --backup --target-dir=/backup/mysql/full_$(date +%Y%m%d) --user=root --password=YOURPASSWORD
# 增量备份
xtrabackup --backup --target-dir=/backup/mysql/incr_$(date +%Y%m%d) --incremental-basedir=/backup/mysql/full_20230101 --user=root --password=YOURPASSWORD
# 使用rclone同步到云存储
rclone sync /backup/lnmp remote:backup-bucket
通过实施上述备份与恢复策略,可以确保LNMP服务器在遇到故障时能够快速恢复,最大限度减少业务中断和数据丢失风险。