如何对服务器进行备份?

对服务器进行备份是一个系统工程,核心目标是在数据丢失、系统崩溃或遭受攻击时能快速恢复,备份方案取决于你服务器的类型(物理机/云服务器)、操作系统(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、系统镜像(快速重建整机):整个操作系统盘、云服务器的系统盘快照。

三、备份的具体方法(分场景)

场景 1:Linux 服务器(最常见)

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.gz

PostgreSQL

    pg_dumpall -U postgres | gzip > /backup/pg/all-dbs-$(date +%Y%m%d).sql.gz

C. 系统级快照(用于云服务器)

- 登录云服务商(AWS、阿里云、腾讯云)控制台。

创建快照:找到你的云硬盘(系统盘或数据盘),手动创建快照,或设置自动快照策略(例如每天一次,保留7天)。

创建自定义镜像:在服务器配置完美后,制作一个镜像,以后可直接用该镜像创建新服务器。

场景 2:Windows 服务器

A. 使用 Windows Server Backup 工具

1、 打开“服务器管理器” -> “添加角色和功能” -> 安装“Windows Server Backup”功能。

2、 打开“Windows Server Backup”,选择“备份计划”或“一次性备份”。

3、 选择备份内容:整个服务器(最稳妥,包括系统状态)或自定义(选特定卷、数据库文件)。

4、 选择存储目标:本地硬盘、共享文件夹、可移动媒体。

B. 使用 VSS(卷影副本)

- 系统会定期自动创建卷影副本,可以右键文件/文件夹 -> “属性” -> “以前的版本” 来恢复单个文件。

场景 3:使用专业的备份工具(推荐)

如果服务器数量多或数据重要,建议使用开源或商业工具:

开源方案

BorgBackup:去重备份,非常节省空间。

Restic:支持多种后端(本地、S3、SFTP),加密快照。

Duplicati:有Web界面,支持增量加密备份到云(Google Drive、OneDrive、S3)。

商业/云方案

Veeam Backup & Replication(社区版免费,支持虚拟机):文件、应用、整个系统。

Acronis Cyber Protect:传统强项。

Cosmos Backup(原Alibaba Cloud HBR)、AWS Backup:云厂商原生服务,无代理。

四、自动化备份脚本示例(Linux)

创建一个脚本/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.sql

3、整机恢复:如果是云快照,直接基于快照创建一个新实例;如果是物理机,使用系统盘镜像刻录并启动。

场景 推荐做法
简单网站 (1-2台) 每天用tar 打包 + 数据库导出,用rsync 同步到另一台VPS国内对象存储(如阿里云OSS、腾讯云COS)。
公司重要服务器 使用Veeam Agent 整机备份到NAS或云存储,或使用云厂商自动快照 +定期导出镜像到异地
数据库服务器 开启二进制日志(binlog),除每日全量导出外,每5分钟备份binlog实现时间点恢复(PITR)

最后一步:在你的日历上设置一个每季度执行一次的“恢复演练”任务,只有当你成功从备份中启动并服务正常时,才算真正完成了备份。

文章摘自:https://idc.huochengrm.cn/fwq/25264.html

评论