النسخ الاحتياطي والاستعادة
صدّر ذكرياتك للنسخ الاحتياطي، ارتحل بين العقول، استعد بعد فقدان البيانات.
النسخ الاحتياطي والاستعادة
يوفّر 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أفضل الممارسات
الخطوات التالية
- Memory API
- Cron والمجدول — للنسخ الاحتياطي المؤتمت