---
title: "备份与恢复"
description: "了解如何配置自动备份、恢复 MPCIUM 数据库，以及集成 AWS S3 进行云端存储。"
url: https://docs.fystack.io/zh/mpcium/backup
last_updated: 2026-11-13
---

> ## Documentation index
> Fetch the complete documentation index at: https://docs.fystack.io/llms.txt
> Use it to discover all available pages before exploring further.

# 备份与恢复

MPCIUM 提供可靠的备份与恢复能力，确保分布式 MPC 集群的数据不会丢失。备份系统采用带加密的增量备份策略，在尽量减少资源占用的同时，高效地存储并保护数据库状态。

_Diagram: 增量备份_

> **Warning.** **重要**：在生产环境中实施之前，请务必先在非生产环境中测试备份与恢复流程。

## 备份配置

MPCIUM 支持可配置的备份设置，可在 `config.yaml` 文件中进行调整：

**备份配置**

```yaml
# Backup Configuration
backup_enabled: true                    # Enable/disable automatic backups (default: true)
backup_period_seconds: 300              # How often to perform backups in seconds (default: 300)
backup_dir: "./backups"                 # Directory where encrypted backups are stored
```

### 配置参数

**backup_enabled** (boolean)

控制是否执行自动备份。设置为 `false` 可完全禁用备份。

**backup_period_seconds** (integer)

定义两次自动备份之间的间隔（秒）。默认值 300 秒（5 分钟）在数据保护和系统性能之间取得了良好的平衡。

**backup_dir** (string)

指定加密备份文件的存储目录。请确保该目录具有适当的权限和足够的磁盘空间。

## 备份策略

MPCIUM 采用**增量备份策略**，仅高效存储自上次备份以来的变更，从而降低存储需求并缩短备份时间。这种方式确保每次备份都不会重复之前的备份内容，在保持完整数据保护的同时，大幅节省存储空间和网络带宽。

### 备份文件结构

备份文件存储在配置的备份目录中，命名规则如下：

```
node0/
└── backups/
    ├── backup-node0-2025-07-28_20-46-39-1.enc
    ├── backup-node0-2025-07-28_20-48-39-2.enc
    ├── backup-node0-2025-07-28_20-49-39-3.enc
    └── latest.version
```

### 备份文件格式

每个备份文件包含：

- 自上次备份以来的**增量数据库变更**（而非完整副本）
- 使用 AES-256-GCM 加密的**数据库状态**，确保传输和存储过程中的安全
- **元数据**，包括创建时间戳、加密参数和版本信息
- **增量更新链**，可据此重建并恢复完整的数据库状态

### 备份元数据示例

```json
{
  "algo": "AES-256-GCM",
  "nonce_b64": "MgDMCSqKNujD+9na",
  "created_at": "2025-07-28T20:46:39+07:00",
  "since": 0,
  "next_since": 6,
  "encryption_key_id": "bd1937594bea2580"
}
```

> **Info.** **安全性**：备份文件使用与数据库加密相同的 `badger_password` 进行加密，确保备份数据在传输和存储过程中的安全。增量方式与加密相结合，兼顾了资源效率和数据保护。

## 恢复流程

### 使用 mpcium-cli recover

要从加密备份文件中恢复 MPCIUM 数据库，请使用 `mpcium-cli recover` 命令：

**恢复命令**

```bash
mpcium-cli recover --help

NAME:
   mpcium recover - Recover database from encrypted backup files

USAGE:
   mpcium recover [command [command options]]

OPTIONS:
   --backup-dir string, -b string             Directory containing encrypted backup files
   --recovery-path string, -r string          Target path for database recovery
   --backup-encryption-key string, -k string  Encryption key for backup files (will prompt if not provided)
   --force, -f                                Force overwrite if recovery path already exists (default: false)
   --help, -h                                 show help
```

### 恢复过程

1. **停止 MPCIUM 节点**，确保没有正在进行的数据库操作
2. 使用合适的参数**运行恢复命令**
3. **更新配置**，使其指向恢复后的数据库
4. 使用恢复后的数据**重启节点**

_Image: 备份恢复_

**恢复示例**

```bash
# Step 1: Stop the MPCIUM node

# Step 2: Recover the database
mpcium-cli recover \
  --backup-dir backups/ \
  --recovery-path restore_db/node0

# Step 3: Update config.yaml
# Change db_path to: db_path: "restore_db"

# Step 4: Restart the node

mpcium start -n node0
```

## AWS S3 集成

MPCIUM 支持使用 AWS S3 进行云端备份存储，提供额外的冗余和灾难恢复能力。

### 设置 S3 备份

#### 1. 创建 S3 存储桶

**创建 S3 存储桶**

```bash
aws s3 mb s3://node0-backup --region ap-southeast-1
```

> **Info.** **注意**：请将 `ap-southeast-1` 替换为你需要的区域。存储桶名称必须全局唯一。

#### 2. 配置 S3 权限

请确保你的 AWS 凭证具有执行 S3 操作的相应权限：

**S3 策略示例**

```json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:ListBucket",
        "s3:DeleteObject"
      ],
      "Resource": [
        "arn:aws:s3:::node0-backup",
        "arn:aws:s3:::node0-backup/*"
      ]
    }
  ]
}
```

### S3 备份操作

#### 将本地备份上传到 S3

**上传到 S3**

```bash
# Sync local backup folder to S3
aws s3 sync ./backups s3://node0-backup
```

#### 从 S3 下载备份

**从 S3 下载**

```bash
# Sync from S3 to local folder
aws s3 sync s3://node0-backup ./backups
```

#### 校验 S3 备份

**校验 S3 内容**

```bash
# List S3 backup contents
aws s3 ls s3://node0-backup --recursive

# Check backup file details
aws s3api head-object --bucket node0-backup --key backup-node0-2025-07-28_20-46-39-1.enc
```

Former: Product Manager at TomoChain labs

## 自动备份

### 设置 Cron 任务

使用 cron 任务设置自动 S3 备份，确保定期同步到云端存储：

**Cron 任务配置**

```bash
# Edit crontab
crontab -e

# Add backup job (runs every hour)
0 * * * * /usr/local/bin/backup-mpcium.sh

# Add daily backup verification
0 2 * * * /usr/local/bin/verify-backup.sh
```

### 备份脚本示例

创建一个备份脚本，自动执行 S3 同步过程：

**备份脚本**

```bash
#!/bin/bash
# /usr/local/bin/backup-mpcium.sh

# Configuration
NODE_NAME="node0"
S3_BUCKET="node0-backup"
BACKUP_DIR="/opt/mpcium/node0/backups"
LOG_FILE="/var/log/mpcium-backup.log"

# Log function
log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
}

# Start backup
log "Starting MPCIUM backup to S3"

# Sync local backups to S3
if aws s3 sync "$BACKUP_DIR" "s3://$S3_BUCKET" --delete; then
    log "Backup completed successfully"
else
    log "Backup failed"
    exit 1
fi

# Verify backup
if aws s3 ls "s3://$S3_BUCKET" | grep -q "backup-$NODE_NAME"; then
    log "Backup verification successful"
else
    log "Backup verification failed"
    exit 1
fi
```

### 校验脚本

创建一个用于校验备份完整性的脚本：

**校验脚本**

```bash
#!/bin/bash
# /usr/local/bin/verify-backup.sh

# Configuration
S3_BUCKET="node0-backup"
LOG_FILE="/var/log/mpcium-backup-verify.log"

# Log function
log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
}

# Check S3 bucket accessibility
if aws s3 ls "s3://$S3_BUCKET" > /dev/null 2>&1; then
    log "S3 bucket accessible"
else
    log "S3 bucket not accessible"
    exit 1
fi

# Count backup files
BACKUP_COUNT=$(aws s3 ls "s3://$S3_BUCKET" --recursive | grep -c "\.enc$")
log "Found $BACKUP_COUNT backup files in S3"

# Check for recent backups (within last 24 hours)
RECENT_BACKUPS=$(aws s3 ls "s3://$S3_BUCKET" --recursive | grep "$(date '+%Y-%m-%d')" | wc -l)
log "Found $RECENT_BACKUPS backups from today"

if [ "$RECENT_BACKUPS" -eq 0 ]; then
    log "WARNING: No recent backups found"
    exit 1
fi
```

### 监控与告警

为备份流程设置监控：

**监控设置**

```bash
# Check backup script exit status
if [ $? -ne 0 ]; then
    # Send alert (example with curl to webhook)
    curl -X POST -H "Content-Type: application/json" \
         -d '{"text":"MPCIUM backup failed"}' \
         https://your-webhook-url.com/alert
fi
```

> **Success.** **最佳实践**：定期在测试环境中测试备份与恢复流程，确保在需要时能够正常工作。
