一、为什么数据备份至关重要数据是企业的核心资产数据丢失可能造成不可挽回的损失人为失误误删除、误修改系统故障硬盘损坏、数据库崩溃安全威胁勒索病毒、黑客攻击自然灾害火灾、洪水、地震合规要求法规对数据保留的要求数据备份的核心目标在任何情况下都能恢复数据恢复时间越短越好恢复的数据越完整越好二、备份策略分类1. 按备份范围分类类型说明备份时间数据丢失量全量备份备份所有数据长无增量备份备份自上次备份后的增量短取决于频率差异备份备份自上次全量后的差异中介于两者之间2. 备份频率规划每日增量 每周全量 每月归档示例每日凌晨2点执行增量备份每周日凌晨2点执行全量备份每月最后一天执行月度归档备份3. 备份保留策略备份类型保留周期存储位置日备份7天本地磁盘周备份4周本地磁盘 对象存储月备份12个月对象存储异地年备份永久冷存储/磁带三、MySQL备份方案1. 逻辑备份mysqldump全量备份脚本#!/bin/bash# backup_full.shBACKUP_DIR/data/backup/mysqlDATE$(date%Y%m%d)MYSQL_USERbackupMYSQL_PASSWORDpasswordMYSQL_HOSTlocalhost# 创建备份目录mkdir-p${BACKUP_DIR}/${DATE}# 执行全量备份mysqldump -h${MYSQL_HOST}\-u${MYSQL_USER}\-p${MYSQL_PASSWORD}\--single-transaction\--routines\--triggers\--events\--all-databases\|gzip${BACKUP_DIR}/${DATE}/full_backup.sql.gz# 删除7天前的备份find${BACKUP_DIR}-mtime7-typef-name*.sql.gz-deleteecho全量备份完成:${DATE}增量备份基于Binlog#!/bin/bash# backup_incr.shBACKUP_DIR/data/backup/mysql/incrementalDATE$(date%Y%m%d_%H%M%S)MYSQL_DATA_DIR/var/lib/mysql# 刷新日志锁定位置mysql-eFLUSH LOGS;# 获取当前的binlog文件BINLOG_FILE$(mysql-eSHOW MASTER STATUS\G|grepFile|awk{print $2})# 复制binlog文件到备份目录mkdir-p${BACKUP_DIR}/${DATE}cp${MYSQL_DATA_DIR}/${BINLOG_FILE}${BACKUP_DIR}/${DATE}/# 记录当前的binlog位置echo${BINLOG_FILE}${BACKUP_DIR}/last_binlogecho增量备份完成:${DATE}2. 物理备份XtraBackup全量备份#!/bin/bash# xtrabackup_full.shBACKUP_DIR/data/backup/xtrabackupDATE$(date%Y%m%d)TARGET_DIR${BACKUP_DIR}/${DATE}# 执行备份xtrabackup\--backup\--target-dir${TARGET_DIR}\--userbackup\--passwordpassword\--hostlocalhost# 准备备份应用日志xtrabackup\--prepare\--target-dir${TARGET_DIR}# 压缩备份tar-czf${TARGET_DIR}.tar.gz-C${BACKUP_DIR}${DATE}rm-rf${TARGET_DIR}echoXtraBackup全量备份完成:${DATE}3. MySQL备份恢复全量恢复# 停止MySQLsystemctl stop mysql# 清空数据目录rm-rf/var/lib/mysql/*# 解压备份gunzip full_backup.sql.gz# 恢复数据mysql-uroot-pfull_backup.sql# 启动MySQLsystemctl start mysql四、Redis备份方案1. RDB快照备份配置自动备份# redis.conf save 900 1 # 900秒内至少1次修改则触发BGSAVE save 300 10 # 300秒内至少10次修改则触发BGSAVE save 60 10000 # 60秒内至少10000次修改则触发BGSAVE # 备份文件位置 dir /data/redis/backup # RDB压缩 rdbcompression yes手动备份脚本#!/bin/bash# redis_backup.shBACKUP_DIR/data/backup/redisDATE$(date%Y%m%d_%H%M%S)# BGSAVE异步执行备份redis-cli BGSAVE# 等待备份完成while[$(redis-cli LASTSAVE)$(redis-cli LASTSAVE)];dosleep1done# 复制备份文件cp/data/redis/dump.rdb${BACKUP_DIR}/dump_${DATE}.rdb# 压缩备份gzip${BACKUP_DIR}/dump_${DATE}.rdbechoRedis备份完成:${DATE}2. AOF持久化备份# redis.conf appendonly yes appendfilename appendonly.aof appendfsync everysec dir /data/redis/backup五、文件备份方案1. 对象存储备份Java代码实现ServicepublicclassFileBackupService{AutowiredprivateOSSossClient;Value(${oss.bucket-name})privateStringbucketName;publicvoidbackupFile(StringlocalPath,StringbackupDate){FilefilenewFile(localPath);if(!file.exists()){thrownewRuntimeException(备份文件不存在: localPath);}// 构建OSS路径StringobjectKeyString.format(backup/%s/%s,backupDate,file.getName());// 上传到OSSossClient.putObject(bucketName,objectKey,file);log.info(文件备份成功: {} - oss://{}/{},localPath,bucketName,objectKey);}}2. Rsync增量备份#!/bin/bash# rsync_backup.shSOURCE_DIR/data/appBACKUP_DIR/data/backup/appRSYNC_USERbackupRSYNC_HOSTbackup-server# 使用rsync进行增量备份rsync-avz\--delete\--bwlimit5000\${SOURCE_DIR}/\${RSYNC_USER}${RSYNC_HOST}::backup/${HOSTNAME}/echoRsync备份完成六、备份策略设计1. 3-2-1备份原则3份数据副本生产数据 本地备份 异地备份2种存储介质磁盘 对象存储/磁带1份离线副本冷存储/异地防范勒索病毒2. 分层备份架构生产环境 ↓ 本地备份分钟级RPO ↓ 同城备份小时级RPO ↓ 异地备份天级RPO3. 备份监控ComponentpublicclassBackupMonitor{Scheduled(cron0 0 3 * * ?)publicvoidcheckBackupStatus(){// 检查备份任务是否成功执行LocalDatetodayLocalDate.now();ListBackupJobjobsbackupJobRepository.findByDate(today);for(BackupJobjob:jobs){if(!SUCCESS.equals(job.getStatus())){alertService.alert(备份失败: job.getJobName());}}// 检查备份存储空间longusedSpacebackupStorageService.getUsedSpace();longtotalSpacebackupStorageService.getTotalSpace();doubleusageRatio(double)usedSpace/totalSpace;if(usageRatio0.8){alertService.alert(备份存储空间使用率超过80%);}}}七、灾难恢复演练1. 演练计划演练类型频率覆盖范围单表恢复每月测试环境全量恢复每季度隔离环境灾难切换每半年生产模拟跨机房切换每年全链路2. 演练验收清单备份文件完整无损坏恢复脚本执行无报错数据恢复后完整性验证通过应用启动正常核心业务流程验证通过监控告警正常触发恢复时间在预期范围内八、总结数据备份是数据安全的最后一道防线策略设计3-2-1原则 分层备份工具选择mysqldump/XtraBackup Redis备份 对象存储自动化备份任务自动化执行监控告警备份状态实时监控定期演练确保备份可恢复备份不是目的恢复才是。定期演练是检验备份有效性的唯一标准。个人观点仅供参考
【架构实战】数据备份与灾难恢复策略
发布时间:2026/7/2 2:04:38
一、为什么数据备份至关重要数据是企业的核心资产数据丢失可能造成不可挽回的损失人为失误误删除、误修改系统故障硬盘损坏、数据库崩溃安全威胁勒索病毒、黑客攻击自然灾害火灾、洪水、地震合规要求法规对数据保留的要求数据备份的核心目标在任何情况下都能恢复数据恢复时间越短越好恢复的数据越完整越好二、备份策略分类1. 按备份范围分类类型说明备份时间数据丢失量全量备份备份所有数据长无增量备份备份自上次备份后的增量短取决于频率差异备份备份自上次全量后的差异中介于两者之间2. 备份频率规划每日增量 每周全量 每月归档示例每日凌晨2点执行增量备份每周日凌晨2点执行全量备份每月最后一天执行月度归档备份3. 备份保留策略备份类型保留周期存储位置日备份7天本地磁盘周备份4周本地磁盘 对象存储月备份12个月对象存储异地年备份永久冷存储/磁带三、MySQL备份方案1. 逻辑备份mysqldump全量备份脚本#!/bin/bash# backup_full.shBACKUP_DIR/data/backup/mysqlDATE$(date%Y%m%d)MYSQL_USERbackupMYSQL_PASSWORDpasswordMYSQL_HOSTlocalhost# 创建备份目录mkdir-p${BACKUP_DIR}/${DATE}# 执行全量备份mysqldump -h${MYSQL_HOST}\-u${MYSQL_USER}\-p${MYSQL_PASSWORD}\--single-transaction\--routines\--triggers\--events\--all-databases\|gzip${BACKUP_DIR}/${DATE}/full_backup.sql.gz# 删除7天前的备份find${BACKUP_DIR}-mtime7-typef-name*.sql.gz-deleteecho全量备份完成:${DATE}增量备份基于Binlog#!/bin/bash# backup_incr.shBACKUP_DIR/data/backup/mysql/incrementalDATE$(date%Y%m%d_%H%M%S)MYSQL_DATA_DIR/var/lib/mysql# 刷新日志锁定位置mysql-eFLUSH LOGS;# 获取当前的binlog文件BINLOG_FILE$(mysql-eSHOW MASTER STATUS\G|grepFile|awk{print $2})# 复制binlog文件到备份目录mkdir-p${BACKUP_DIR}/${DATE}cp${MYSQL_DATA_DIR}/${BINLOG_FILE}${BACKUP_DIR}/${DATE}/# 记录当前的binlog位置echo${BINLOG_FILE}${BACKUP_DIR}/last_binlogecho增量备份完成:${DATE}2. 物理备份XtraBackup全量备份#!/bin/bash# xtrabackup_full.shBACKUP_DIR/data/backup/xtrabackupDATE$(date%Y%m%d)TARGET_DIR${BACKUP_DIR}/${DATE}# 执行备份xtrabackup\--backup\--target-dir${TARGET_DIR}\--userbackup\--passwordpassword\--hostlocalhost# 准备备份应用日志xtrabackup\--prepare\--target-dir${TARGET_DIR}# 压缩备份tar-czf${TARGET_DIR}.tar.gz-C${BACKUP_DIR}${DATE}rm-rf${TARGET_DIR}echoXtraBackup全量备份完成:${DATE}3. MySQL备份恢复全量恢复# 停止MySQLsystemctl stop mysql# 清空数据目录rm-rf/var/lib/mysql/*# 解压备份gunzip full_backup.sql.gz# 恢复数据mysql-uroot-pfull_backup.sql# 启动MySQLsystemctl start mysql四、Redis备份方案1. RDB快照备份配置自动备份# redis.conf save 900 1 # 900秒内至少1次修改则触发BGSAVE save 300 10 # 300秒内至少10次修改则触发BGSAVE save 60 10000 # 60秒内至少10000次修改则触发BGSAVE # 备份文件位置 dir /data/redis/backup # RDB压缩 rdbcompression yes手动备份脚本#!/bin/bash# redis_backup.shBACKUP_DIR/data/backup/redisDATE$(date%Y%m%d_%H%M%S)# BGSAVE异步执行备份redis-cli BGSAVE# 等待备份完成while[$(redis-cli LASTSAVE)$(redis-cli LASTSAVE)];dosleep1done# 复制备份文件cp/data/redis/dump.rdb${BACKUP_DIR}/dump_${DATE}.rdb# 压缩备份gzip${BACKUP_DIR}/dump_${DATE}.rdbechoRedis备份完成:${DATE}2. AOF持久化备份# redis.conf appendonly yes appendfilename appendonly.aof appendfsync everysec dir /data/redis/backup五、文件备份方案1. 对象存储备份Java代码实现ServicepublicclassFileBackupService{AutowiredprivateOSSossClient;Value(${oss.bucket-name})privateStringbucketName;publicvoidbackupFile(StringlocalPath,StringbackupDate){FilefilenewFile(localPath);if(!file.exists()){thrownewRuntimeException(备份文件不存在: localPath);}// 构建OSS路径StringobjectKeyString.format(backup/%s/%s,backupDate,file.getName());// 上传到OSSossClient.putObject(bucketName,objectKey,file);log.info(文件备份成功: {} - oss://{}/{},localPath,bucketName,objectKey);}}2. Rsync增量备份#!/bin/bash# rsync_backup.shSOURCE_DIR/data/appBACKUP_DIR/data/backup/appRSYNC_USERbackupRSYNC_HOSTbackup-server# 使用rsync进行增量备份rsync-avz\--delete\--bwlimit5000\${SOURCE_DIR}/\${RSYNC_USER}${RSYNC_HOST}::backup/${HOSTNAME}/echoRsync备份完成六、备份策略设计1. 3-2-1备份原则3份数据副本生产数据 本地备份 异地备份2种存储介质磁盘 对象存储/磁带1份离线副本冷存储/异地防范勒索病毒2. 分层备份架构生产环境 ↓ 本地备份分钟级RPO ↓ 同城备份小时级RPO ↓ 异地备份天级RPO3. 备份监控ComponentpublicclassBackupMonitor{Scheduled(cron0 0 3 * * ?)publicvoidcheckBackupStatus(){// 检查备份任务是否成功执行LocalDatetodayLocalDate.now();ListBackupJobjobsbackupJobRepository.findByDate(today);for(BackupJobjob:jobs){if(!SUCCESS.equals(job.getStatus())){alertService.alert(备份失败: job.getJobName());}}// 检查备份存储空间longusedSpacebackupStorageService.getUsedSpace();longtotalSpacebackupStorageService.getTotalSpace();doubleusageRatio(double)usedSpace/totalSpace;if(usageRatio0.8){alertService.alert(备份存储空间使用率超过80%);}}}七、灾难恢复演练1. 演练计划演练类型频率覆盖范围单表恢复每月测试环境全量恢复每季度隔离环境灾难切换每半年生产模拟跨机房切换每年全链路2. 演练验收清单备份文件完整无损坏恢复脚本执行无报错数据恢复后完整性验证通过应用启动正常核心业务流程验证通过监控告警正常触发恢复时间在预期范围内八、总结数据备份是数据安全的最后一道防线策略设计3-2-1原则 分层备份工具选择mysqldump/XtraBackup Redis备份 对象存储自动化备份任务自动化执行监控告警备份状态实时监控定期演练确保备份可恢复备份不是目的恢复才是。定期演练是检验备份有效性的唯一标准。个人观点仅供参考