确定需要备份的内容:
创建备份目录:
mkdir -p /backup/{web,db,config}
备份网站目录:
tar -czvf /backup/web/website_$(date +%Y%m%d).tar.gz /var/www/html/
备份用户主目录(如果网站位于/home下):
tar -czvf /backup/web/home_sites_$(date +%Y%m%d).tar.gz /home/
MySQL/MariaDB备份:
mysqldump -u root -p --all-databases > /backup/db/mysql_all_$(date +%Y%m%d).sql
PostgreSQL备份:
sudo -u postgres pg_dumpall > /backup/db/pg_all_$(date +%Y%m%d).sql
备份Web服务器配置:
# Apache
tar -czvf /backup/config/apache_$(date +%Y%m%d).tar.gz /etc/httpd/
# Nginx
tar -czvf /backup/config/nginx_$(date +%Y%m%d).tar.gz /etc/nginx/
备份PHP配置:
tar -czvf /backup/config/php_$(date +%Y%m%d).tar.gz /etc/php.d/ /etc/php.ini
备份系统关键配置:
tar -czvf /backup/config/etc_$(date +%Y%m%d).tar.gz /etc/
备份SSL证书:
tar -czvf /backup/config/ssl_$(date +%Y%m%d).tar.gz /etc/ssl/
创建/usr/local/bin/backup_server.sh
:
#!/bin/bash
# 定义备份目录
BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d)
# 创建日期目录
mkdir -p $BACKUP_DIR/$DATE
# 备份网站文件
tar -czvf $BACKUP_DIR/$DATE/website.tar.gz /var/www/html/
# 备份数据库
mysqldump -u root -pYOURPASSWORD --all-databases > $BACKUP_DIR/$DATE/mysql_all.sql
# 备份配置
tar -czvf $BACKUP_DIR/$DATE/apache_config.tar.gz /etc/httpd/
tar -czvf $BACKUP_DIR/$DATE/php_config.tar.gz /etc/php.d/ /etc/php.ini
# 保留最近7天的备份
find $BACKUP_DIR -type d -mtime +7 -exec rm -rf {} \;
echo "Backup completed on $(date)" >> $BACKUP_DIR/backup.log
设置可执行权限:
chmod +x /usr/local/bin/backup_server.sh
添加到cron定时任务:
crontab -e
添加以下内容(每天凌晨2点执行):
0 2 * * * /usr/local/bin/backup_server.sh
列出备份文件:
ls -lh /backup/
验证压缩包完整性:
gzip -t /backup/web/website_*.tar.gz
查看数据库备份内容:
head -n 20 /backup/db/mysql_all_*.sql
恢复网站文件:
tar -xzvf /backup/web/website_20230101.tar.gz -C /
恢复MySQL数据库:
mysql -u root -p < /backup/db/mysql_all_20230101.sql
恢复PostgreSQL数据库:
sudo -u postgres psql -f /backup/db/pg_all_20230101.sql
恢复配置文件:
# Apache
tar -xzvf /backup/config/apache_20230101.tar.gz -C /
# Nginx
tar -xzvf /backup/config/nginx_20230101.tar.gz -C /
# PHP
tar -xzvf /backup/config/php_20230101.tar.gz -C /
重启服务:
# Apache
systemctl restart httpd
# Nginx
systemctl restart nginx
# PHP-FPM
systemctl restart php-fpm
远程存储:
异地备份:定期将备份复制到物理介质并存储在安全位置
备份文件权限:
chmod 600 /backup/*
加密敏感备份:
gpg -c /backup/db/mysql_all_20230101.sql
删除明文密码:确保脚本中不包含明文密码,使用配置文件或环境变量
定期测试恢复:每季度至少进行一次恢复测试
通过遵循本指南,您可以确保CentOS Web服务器的配置和数据得到妥善备份,并在需要时能够快速恢复服务。