对服务器进行备份是一个系统工程,核心目标是在数据丢失、系统崩溃或遭受攻击时能快速恢复,备份方案取决于你服务器的类型(物理机/云服务器)、操作系统(Linux/Windows)以及运行的服务(数据库、网站等)。
下面是一个从基础到深入的备份指南,涵盖重要原则和具体操作。
1、3-2-1 备份原则:这是业界黄金法则。
3:保留数据的3份副本(1份生产 + 2份备份)。
2:使用2种不同的存储介质(本地硬盘 + 云存储)。
1:至少有1份备份存放在异地(以防火灾、盗窃、机房故障)。
2、自动化:手动备份总会忘,务必使用脚本和定时任务。
3、定期测试恢复:备份了不等于能恢复,至少每季度进行一次完整的恢复演练。
4、备份不是只拷贝文件:对于数据库、邮件系统等,需使用一致性快照或导出工具。
5、加密与安全:备份数据包含敏感信息,传输和存储时应加密,并严格控制访问权限。
1、配置数据(恢复服务器所需):/etc/ 目录、网络配置、SSH密钥、Web服务器(Nginx/Apache)配置、系统服务配置。
2、应用数据(最核心的):数据库(MySQL、PostgreSQL、MongoDB)、上传目录(/var/www/uploads/)、用户文件、日志(若需审计)。
3、系统镜像(快速重建整机):整个操作系统盘、云服务器的系统盘快照。
A. 使用tar +rsync(经典文件级备份)
1、创建压缩归档(全量备份):
tar -czf /backup/server-backup-$(date +%Y%m%d).tar.gz /home /etc /var/www --exclude=/var/www/cache *注:-c 创建,-z gzip压缩,-f 指定文件,--exclude 排除缓存或临时目录。
2、使用rsync 同步到远程(增量备份,更高效):
# 将本地 /data 同步到远程服务器的 /backup 目录
rsync -avz --delete /data/ user@备份服务器IP:/backup/data/ *参数:-a 归档模式保留属性,-v 详细输出,-z 压缩传输,--delete 删除目标端没有的源文件。
B. 数据库备份(必须单独处理)
MySQL/MariaDB:
mysqldump -u root -p --all-databases > /backup/mysql/all-dbs.sql
# 更推荐用 --single-transaction 避免锁表
mysqldump --single-transaction -u root -p --all-databases | gzip > /backup/mysql/all-dbs-$(date +%Y%m%d).sql.gzPostgreSQL:
pg_dumpall -U postgres | gzip > /backup/pg/all-dbs-$(date +%Y%m%d).sql.gzC. 系统级快照(用于云服务器)
- 登录云服务商(AWS、阿里云、腾讯云)控制台。
创建快照:找到你的云硬盘(系统盘或数据盘),手动创建快照,或设置自动快照策略(例如每天一次,保留7天)。
创建自定义镜像:在服务器配置完美后,制作一个镜像,以后可直接用该镜像创建新服务器。
A. 使用 Windows Server Backup 工具
1、 打开“服务器管理器” -> “添加角色和功能” -> 安装“Windows Server Backup”功能。
2、 打开“Windows Server Backup”,选择“备份计划”或“一次性备份”。
3、 选择备份内容:整个服务器(最稳妥,包括系统状态)或自定义(选特定卷、数据库文件)。
4、 选择存储目标:本地硬盘、共享文件夹、可移动媒体。
B. 使用 VSS(卷影副本)
- 系统会定期自动创建卷影副本,可以右键文件/文件夹 -> “属性” -> “以前的版本” 来恢复单个文件。
如果服务器数量多或数据重要,建议使用开源或商业工具:
开源方案:
BorgBackup:去重备份,非常节省空间。
Restic:支持多种后端(本地、S3、SFTP),加密快照。
Duplicati:有Web界面,支持增量加密备份到云(Google Drive、OneDrive、S3)。
商业/云方案:
Veeam Backup & Replication(社区版免费,支持虚拟机):文件、应用、整个系统。
Acronis Cyber Protect:传统强项。
Cosmos Backup(原Alibaba Cloud HBR)、AWS Backup:云厂商原生服务,无代理。
创建一个脚本/usr/local/bin/backup.sh,然后加入crontab:
#!/bin/bash 每天凌晨2点运行的全量备份脚本 BACKUP_DIR="/backup/daily" REMOTE_USER="root" REMOTE_HOST="192.168.1.100" REMOTE_PATH="/remote_backup" 1. 打包关键目录 tar czf "$BACKUP_DIR/system-$(date +%Y%m%d).tar.gz" /etc /var/log/nginx /home 2. 备份数据库 mysqldump --single-transaction -u root -p密码 --all-databases | gzip > "$BACKUP_DIR/mysql-$(date +%Y%m%d).sql.gz" 3. 同步到远程服务器(确保SSH免密) rsync -avz --delete "$BACKUP_DIR/" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH" 4. 删除本地7天前的旧备份(保留最近7天) find "$BACKUP_DIR" -type f -name "*.tar.gz" -mtime +7 -delete find "$BACKUP_DIR" -type f -name "*.sql.gz" -mtime +7 -delete echo "Backup completed at $(date)"
设置定时任务:
crontab -e 添加一行,每天凌晨2点执行 0 2 * * * /usr/local/bin/backup.sh
备份完成后,一定要找一个测试环境:
1、文件级恢复:在测试机上解压tar.gz 文件,检查文件和权限。
2、数据库恢复:导入.sql 文件到空数据库。
mysql -u root -p < /path/to/backup.sql3、整机恢复:如果是云快照,直接基于快照创建一个新实例;如果是物理机,使用系统盘镜像刻录并启动。
| 场景 | 推荐做法 |
| 简单网站 (1-2台) | 每天用tar 打包 + 数据库导出,用rsync 同步到另一台VPS或国内对象存储(如阿里云OSS、腾讯云COS)。 |
| 公司重要服务器 | 使用Veeam Agent 整机备份到NAS或云存储,或使用云厂商自动快照 +定期导出镜像到异地。 |
| 数据库服务器 | 开启二进制日志(binlog),除每日全量导出外,每5分钟备份binlog实现时间点恢复(PITR)。 |
最后一步:在你的日历上设置一个每季度执行一次的“恢复演练”任务,只有当你成功从备份中启动并服务正常时,才算真正完成了备份。
文章摘自:https://idc.huochengrm.cn/fwq/25264.html
评论