Skip to main content

النسخ الاحتياطي والاستعادة

صدّر ذكرياتك للنسخ الاحتياطي، ارتحل بين العقول، استعد بعد فقدان البيانات.


النسخ الاحتياطي والاستعادة

يوفّر Synapse تصديرًا/استيرادًا كاملًا للنسخ الاحتياطي للذاكرة، والترحيل، والتعافي من الكوارث. يغطي هذا الدليل العمليات الأساسية.

التصدير

تصدير العقل الكامل

صدّر جميع الذكريات في عقل كـ JSON:

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

تنسيق الاستجابة:

{
  "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..."
    }
  ]
}

التصدير التزايدي (Diff)

صدّر فقط الذكريات المتغيّرة منذ طابع زمني:

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

الاستجابة:

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

نسخ احتياطي مؤتمت

جدول نسخًا احتياطيًا يوميًا عبر 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"}
  }'
تستقبل نقطة نهاية cron الاستجابة لكنها لا تخزّنها. للنسخ الحقيقي، وجّه cron إلى خادم النسخ الاحتياطي الخاص بك الذي يحفظ الاستجابة.

أفضل: سكربت نسخ احتياطي خارجي

#!/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"

# احتفظ بآخر 30 يومًا
find "$BACKUP_DIR" -name "synapse-*.json" -mtime +30 -delete

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

أضفه إلى crontab:

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

الاستعادة

الاستعادة إلى نفس العقل

# حلل النسخة الاحتياطية وأعد POST لكل ذاكرة
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

الاستعادة إلى عقل جديد

# 1. أنشئ عقلًا جديدًا
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. استورد الذكريات إلى العقل الجديد
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

سكربت استعادة 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")

الترحيل بين العقول

def migrate_memories(source_key, target_key):
    """Migrate all memories from source mind to target mind."""
    # تصدير من المصدر
    r = requests.get(
        f"{URL}/memory/mind-export",
        headers={"Authorization": f"Bearer {source_key}"}
    )
    data = r.json()
    
    # استيراد إلى الهدف
    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")

نسخ احتياطي للبيانات الأخرى

لا تنسَ نسخ:

نوع البيانات نقطة النهاية
الذكريات GET /memory/mind-export
المهام GET /mind/tasks
السكربتات GET /scripts
الـ Webhooks GET /webhooks
مهام cron GET /cron
المتغيرات GET /var
سجل الدردشة GET /chat/history?limit=10000

التحقق

بعد الاستعادة، تحقق:

# عدّ الذكريات
curl -s -H "Authorization: Bearer $KEY" \
     https://synapse.schaefer.zone/memory/stats | jq .total

# قارن مع النسخة الاحتياطية
jq .memory_count backup.json

أفضل الممارسات

الخطوات التالية