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

重要:在生产环境中实施之前,请务必先在非生产环境中测试备份与恢复流程。
备份配置
MPCIUM 支持可配置的备份设置,可在 config.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 加密的数据库状态,确保传输和存储过程中的安全
- 元数据,包括创建时间戳、加密参数和版本信息
- 增量更新链,可据此重建并恢复完整的数据库状态
备份元数据示例
{
"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"
}
安全性:备份文件使用与数据库加密相同的 badger_password 进行加密,确保备份数据在传输和存储过程中的安全。增量方式与加密相结合,兼顾了资源效率和数据保护。
恢复流程
使用 mpcium-cli recover
要从加密备份文件中恢复 MPCIUM 数据库,请使用 mpcium-cli recover 命令:
恢复命令
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
恢复过程
- 停止 MPCIUM 节点,确保没有正在进行的数据库操作
- 使用合适的参数运行恢复命令
- 更新配置,使其指向恢复后的数据库
- 使用恢复后的数据重启节点
恢复示例
# 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 存储桶
aws s3 mb s3://node0-backup --region ap-southeast-1
2. 配置 S3 权限
请确保你的 AWS 凭证具有执行 S3 操作的相应权限:
S3 策略示例
{
"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
# Sync local backup folder to S3
aws s3 sync ./backups s3://node0-backup
从 S3 下载备份
从 S3 下载
# Sync from S3 to local folder
aws s3 sync s3://node0-backup ./backups
校验 S3 备份
校验 S3 内容
# 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 任务配置
# 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 同步过程:
备份脚本
#!/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
校验脚本
创建一个用于校验备份完整性的脚本:
校验脚本
#!/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
监控与告警
为备份流程设置监控:
监控设置
# 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
最佳实践:定期在测试环境中测试备份与恢复流程,确保在需要时能够正常工作。