disaster-recoverylisted
Install: claude install-skill ryukyagamilight/terminal-skills
# 灾难恢复
## 概述
灾难恢复计划、RTO/RPO、故障切换技能。
## 核心概念
### RTO 与 RPO
```
RPO (Recovery Point Objective)
- 可接受的数据丢失量
- 决定备份频率
RTO (Recovery Time Objective)
- 可接受的恢复时间
- 决定恢复策略
示例:
- RPO = 1小时 → 每小时备份
- RTO = 4小时 → 需要热备或快速恢复
```
### 恢复策略
```
冷备 (Cold)
- 最低成本
- 最长 RTO
- 适合非关键系统
温备 (Warm)
- 中等成本
- 中等 RTO
- 定期同步数据
热备 (Hot)
- 最高成本
- 最短 RTO
- 实时同步
```
## 数据库恢复
### MySQL 恢复
```bash
# 从备份恢复
mysql -u root -p < full_backup.sql
# 应用 binlog
mysqlbinlog mysql-bin.000001 | mysql -u root -p
# 时间点恢复
mysqlbinlog --stop-datetime="2024-01-15 10:00:00" mysql-bin.* | mysql -u root -p
# 主从切换
# 在从库执行
STOP SLAVE;
RESET SLAVE ALL;
# 应用程序切换连接
```
### PostgreSQL 恢复
```bash
# 从备份恢复
pg_restore -d database backup.dump
# PITR 恢复
# recovery.conf
restore_command = 'cp /archive/%f %p'
recovery_target_time = '2024-01-15 10:00:00'
# 主从切换
pg_ctl promote -D /var/lib/postgresql/data
```
### Redis 恢复
```bash
# 从 RDB 恢复
cp backup.rdb /var/lib/redis/dump.rdb
systemctl restart redis
# 从 AOF 恢复
cp backup.aof /var/lib/redis/appendonly.aof
redis-check-aof --fix appendonly.aof
systemctl restart redis
```
## 系统恢复
### 文件系统恢复
```bash
# 从 tar 备份恢复
tar -xzvf /backup/system.tar.gz -C /
# 从 rsync 备份恢复
rsync -avz /backup/system/ /
# 恢复权限
restorecon -Rv /
```
### 引导修复
```bash
# 进入救援模式
# 挂载根分区
mount /dev/sda1 /mnt
mount --bind /dev /mnt/dev
mount --bind /proc /mnt/proc
mount --bind /sys /mnt/sys
chroot /mnt
# 修复 GRUB
grub-install /dev/sda
update-grub
```
## 故障切换
### Keepalived 切换
```bash
# 检查状态
systemctl status keep