# النسخ الاحتياطي والاستعادة يوفّر Synapse تصديرًا/استيرادًا كاملًا للنسخ الاحتياطي للذاكرة، والترحيل، والتعافي من الكوارث. يغطي هذا الدليل العمليات الأساسية. ## التصدير ### تصدير العقل الكامل صدّر جميع الذكريات في عقل كـ JSON: ```bash curl -H "Authorization: Bearer YOUR_MIND_KEY" \ https://synapse.schaefer.zone/memory/mind-export > backup.json ``` تنسيق الاستجابة: ```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) صدّر فقط الذكريات المتغيّرة منذ طابع زمني: ```bash SINCE=$(date -d "2026-06-01" +%s) curl -H "Authorization: Bearer YOUR_MIND_KEY" \ "https://synapse.schaefer.zone/memory/diff?since=$SINCE" > incremental.json ``` الاستجابة: ```json { "added": [...], "updated": [...], "deleted": [...] } ``` ### نسخ احتياطي مؤتمت جدول نسخًا احتياطيًا يوميًا عبر cron: ```bash 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"} }' ``` > [!NOTE] > تستقبل نقطة نهاية cron الاستجابة لكنها لا تخزّنها. للنسخ > الحقيقي، وجّه cron إلى خادم النسخ الاحتياطي الخاص بك الذي يحفظ الاستجابة. ### أفضل: سكربت نسخ احتياطي خارجي ```bash #!/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: ```cron 0 2 * * * /usr/local/bin/backup-synapse.sh ``` ## الاستعادة ### الاستعادة إلى نفس العقل ```bash # حلل النسخة الاحتياطية وأعد 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 ``` ### الاستعادة إلى عقل جديد ```bash # 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 ```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") ``` ## الترحيل بين العقول ```python 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` | ## التحقق بعد الاستعادة، تحقق: ```bash # عدّ الذكريات curl -s -H "Authorization: Bearer $KEY" \ https://synapse.schaefer.zone/memory/stats | jq .total # قارن مع النسخة الاحتياطية jq .memory_count backup.json ``` ## أفضل الممارسات > [!TIP] > - **انسخ احتياطيًا يوميًا** — أتمت بـ cron > - **اختبر الاستعادة** — النسخة التي لا تستطيع استعادتها عديمة الفائدة > - **احتفظ بإصدارات متعددة** — 30 يومًا على الأقل > - **خزّن خارج الموقع** — S3، Backblaze B2، إلخ > - **شفّر النسخ الحساسة** — قد تحتوي الذكريات على PII > - **وثّق عملية الاستعادة** — ستنساها بحلول وقت الحاجة إليها ## الخطوات التالية - [Memory API](/docs/api/memory) - [Cron والمجدول](/docs/api/cron) — للنسخ الاحتياطي المؤتمت