Skip to main content

Sao lưu & Khôi phục

Xuất bộ nhớ để sao lưu, di chuyển giữa các mind, khôi phục sau mất dữ liệu.


Sao lưu & Khôi phục

Synapse cung cấp xuất/nhập đầy đủ cho sao lưu bộ nhớ, di chuyển và khôi phục thảm họa. Hướng dẫn này bao phủ các thao tác thiết yếu.

Xuất

Xuất Mind đầy đủ

Xuất tất cả bộ nhớ trong một mind dưới dạng JSON:

curl -H "Authorization: Bearer YOUR_MIND_KEY" \
     https://synapse.schaefer.zone/memory/mind-export > backup.json

Định dạng phản hồi:

{
  "mind_id": "m_xyz789",
  "mind_name": "Work Mind",
  "exported_at": "2026-06-27T...",
  "memory_count": 142,
  "memories": [
    {
      "id": "mem_001",
      "category": "identity",
      "key": "user_name",
      "content": "Michael Schäfer",
      "tags": ["person", "identity"],
      "priority": "critical",
      "source": "user",
      "verified": true,
      "created_at": "2026-06-15T...",
      "updated_at": "2026-06-27T..."
    }
  ]
}

Xuất gia tăng (Diff)

Xuất chỉ bộ nhớ đã thay đổi kể từ một timestamp:

SINCE=$(date -d "2026-06-01" +%s)
curl -H "Authorization: Bearer YOUR_MIND_KEY" \
     "https://synapse.schaefer.zone/memory/diff?since=$SINCE" > incremental.json

Phản hồi:

{
  "added": [...],
  "updated": [...],
  "deleted": [...]
}

Sao lưu tự động

Lên lịch sao lưu hàng ngày qua cron:

curl -X POST https://synapse.schaefer.zone/cron \
  -H "Authorization: Bearer YOUR_MIND_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "schedule": "0 2 * * *",
    "endpoint": "https://synapse.schaefer.zone/memory/mind-export",
    "method": "GET",
    "headers": {"Authorization": "Bearer YOUR_MIND_KEY"}
  }'
Endpoint cron nhận phản hồi nhưng không lưu nó. Cho sao lưu thực sự, trỏ cron đến server sao lưu riêng của bạn lưu phản hồi.

Tốt hơn: Script sao lưu bên ngoài

#!/bin/bash
# backup-synapse.sh
MIND_KEY="${SYNAPSE_MIND_KEY}"
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backups/synapse"

mkdir -p "$BACKUP_DIR"

curl -s -H "Authorization: Bearer $MIND_KEY" \
     https://synapse.schaefer.zone/memory/mind-export \
     > "$BACKUP_DIR/synapse-$DATE.json"

# Keep last 30 days
find "$BACKUP_DIR" -name "synapse-*.json" -mtime +30 -delete

echo "Backup saved: $BACKUP_DIR/synapse-$DATE.json"

Thêm vào crontab:

0 2 * * * /usr/local/bin/backup-synapse.sh

Khôi phục

Khôi phục về cùng Mind

# Parse backup and re-POST each memory
jq -c '.memories[]' backup.json | while read mem; do
  curl -X POST https://synapse.schaefer.zone/memory \
    -H "Authorization: Bearer YOUR_MIND_KEY" \
    -H "Content-Type: application/json" \
    -d "$(echo "$mem" | jq '{category, key, content, tags, priority}')"
done

Khôi phục về Mind mới

# 1. Create new mind
NEW_KEY=$(curl -s -X POST https://synapse.schaefer.zone/minds \
  -H "Authorization: Bearer YOUR_JWT" \
  -H "Content-Type: application/json" \
  -d '{"name":"Restored Mind","description":"Restore from backup"}' \
  | jq -r .mind_key)

# 2. Import memories to new mind
jq -c '.memories[]' backup.json | while read mem; do
  curl -X POST https://synapse.schaefer.zone/memory \
    -H "Authorization: Bearer $NEW_KEY" \
    -H "Content-Type: application/json" \
    -d "$(echo "$mem" | jq '{category, key, content, tags, priority}')"
done

Script khôi phục Python

import json
import requests

URL = "https://synapse.schaefer.zone"
MIND_KEY = "mk_..."

def restore(backup_file):
    with open(backup_file) as f:
        data = json.load(f)
    
    for mem in data["memories"]:
        requests.post(
            f"{URL}/memory",
            headers={
                "Authorization": f"Bearer {MIND_KEY}",
                "Content-Type": "application/json"
            },
            json={
                "category": mem["category"],
                "key": mem["key"],
                "content": mem["content"],
                "tags": mem.get("tags", []),
                "priority": mem.get("priority", "normal")
            }
        )
    
    print(f"Restored {len(data['memories'])} memories")

restore("backup.json")

Di chuyển giữa các Mind

def migrate_memories(source_key, target_key):
    """Migrate all memories from source mind to target mind."""
    # Export from source
    r = requests.get(
        f"{URL}/memory/mind-export",
        headers={"Authorization": f"Bearer {source_key}"}
    )
    data = r.json()
    
    # Import to target
    for mem in data["memories"]:
        requests.post(
            f"{URL}/memory",
            headers={
                "Authorization": f"Bearer {target_key}",
                "Content-Type": "application/json"
            },
            json={
                "category": mem["category"],
                "key": mem["key"],
                "content": mem["content"],
                "tags": mem.get("tags", []),
                "priority": mem.get("priority", "normal")
            }
        )
    
    print(f"Migrated {len(data['memories'])} memories")

Sao lưu dữ liệu khác

Đừng quên sao lưu:

Loại dữ liệu Endpoint
Bộ nhớ GET /memory/mind-export
Tác vụ GET /mind/tasks
Script GET /scripts
Webhook GET /webhooks
Cron job GET /cron
Biến GET /var
Lịch sử chat GET /chat/history?limit=10000

Xác minh

Sau khi khôi phục, xác minh:

# Count memories
curl -s -H "Authorization: Bearer $KEY" \
     https://synapse.schaefer.zone/memory/stats | jq .total

# Compare with backup
jq .memory_count backup.json

Thực hành tốt nhất

Bước tiếp theo