> For the complete documentation index, see [llms.txt](https://docs.enginsight.com/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.enginsight.com/docs/knowledge-base/datenbank/wie-erstelle-ich-in-enginsight-ein-backup-einer-oder-mehrerer-organisationen.md).

# Wie erstelle ich in Enginsight ein Backup einer oder mehrerer Organisationen?

In diesem Artikel zeigen wir dir, wie du in Enginsight ein Backup einer oder mehrerer Organisationen erstellen kannst. Nimm dazu folgende Schritte vor:

{% stepper %}
{% step %}

### Auf dem Datenbankserver anmelden

Logge dich auf dem **Enginsight Datenbankserver** ein.
{% endstep %}

{% step %}

### Verzeichnis für das Backup-Skript und Backup-Basisordner erstellen

1. Erstelle mit folgendem Befehl ein Verzeichnis, in dem du dein Backup-Skript ablegen möchtest, z.B. `/opt/enginsight/scripts`:

```
sudo mkdir -p /opt/enginsight/<SkriptOrdnername>
cd /opt/enginsight/<SkriptOrdnername>
```

{% hint style="info" %}
Vergiss dabei nicht, `<SkriptOrdnername>` entsprechend zu ersetzen.
{% endhint %}

2. Erstelle mit folgendem Befehl einen eigenen Backup-Zielpfad mit Backup-Basisordner, z.B. `/var/backups/enginsight/orga_backup`:

```
sudo mkdir -p /var/backups/enginsight/<BackupBasisordner>
```

{% hint style="info" %}
Vergiss dabei nicht, `<BackupBasisordner>` entsprechend zu ersetzen.
{% endhint %}
{% endstep %}

{% step %}

### Skript-Datei erstellen und ablegen

1. Erstelle mit folgendem Befehl eine Backup-Skript-Datei:

```
sudo nano /opt/enginsight/<SkriptOrdnername>/<SkriptDateiname>.sh
```

{% hint style="info" %}
Vergiss dabei nicht, `<SkriptOrdnername>` und `<SkriptDateiname>` entsprechend zu ersetzen.
{% endhint %}

2. Füge folgende Skript-Vorlage ein und ersetze die Platzhalter in `<>` entsprechend:

<pre><code>#!/usr/bin/env bash

set -euo pipefail

# 1) Organisation(en): eine oder mehrere Organisations-IDs eintragen (ohne Leerzeichen und ohne Trennzeichen) z.B. ("OrganisationsID1" "OrganisationsID2") 
<strong>ORG_IDS=( "&#x3C;OrganisationsID1>" )
</strong>
# 2) Backup-Basisordner
<strong>BACKUP_BASE="/var/backups/enginsight/&#x3C;BackupBasisordner>"
</strong>
# Optional: Zeitstempel pro Lauf 
TS="$(date +%F_%H%M%S)"
RUN_DIR="${BACKUP_BASE}/${TS}"

# Optional: Falls deine Mongo-CLI/Connection Parameter benötigt, können diese hier ergänzt werden.
# Standard (lokal auf Datenbankserver, keine Authentifizierung, keine TLS-Verschlüsselung):
MONGO_EXPORT_BASE=(mongoexport --db "enginsight")
MONGO_SHELL_BASE=(mongo "enginsight" --quiet)

# Beispiele (NUR falls benötigt) – Username/Passwort/TLS sinngemäß ergänzen:
<strong># MONGO_EXPORT_BASE=(mongoexport --host "rs0/&#x3C;IPAdresseDatenbankserver>:27017" --username "mongoDefaultUser" --password "$(&#x3C;/etc/enginsight/mongoDefaultUserPassword)" --authenticationDatabase "enginsight" --ssl --sslCAFile /etc/enginsight/ssl/mongodbCA.crt --sslPEMKeyFile /etc/enginsight/ssl/mongodb.pem --db "enginsight")
</strong># MONGO_SHELL_BASE=(mongo "enginsight" --quiet)  # ggf. ebenfalls Host/Auth/TLS ergänzen

# === Checks ===
command -v mongoexport >/dev/null 2>&#x26;1 || { echo "mongoexport nicht gefunden"; exit 1; }
command -v mongo >/dev/null 2>&#x26;1 || { echo "mongo (Shell) nicht gefunden"; exit 1; }

mkdir -p "$RUN_DIR"

for ORG_ID in "${ORG_IDS[@]}"; do
  OUT_DIR="${RUN_DIR}/${ORG_ID}"
  mkdir -p "$OUT_DIR"
  cd "$OUT_DIR"

  # Alle Collections ermitteln und pro Collection nach 'organisation'-Filter exportieren
  echo "show collections" | "${MONGO_SHELL_BASE[@]}" \
    | xargs -I {} "${MONGO_EXPORT_BASE[@]}" --collection {} \
        --query '{"organisation":{"$eq":{"$oid":"'"$ORG_ID"'"}}}' \
        --out {}.json
  # Zusätzlich die Organisation selbst aus der 'organisations'-Collection sichern
  "${MONGO_EXPORT_BASE[@]}" --collection organisations \
    --query '{"_id":{"$eq":{"$oid":"'"$ORG_ID"'"}}}' \
    --out organisations.json

  cd - >/dev/null
done
</code></pre>

{% hint style="info" %}
Vergiss dabei nicht, die folgenden Platzhalter in `<>` entsprechend zu ersetzen:

* `<OrganisationsIDx>`
* `<BackupBasisordner>`
* `<IPAdresseDatenbankserver>`
  {% endhint %}

3. Speichere die Datei (**Strg** + **o**) und bestätige den Speicherprozess. Schließe die Datei (**Strg** + **x**).
4. Gib folgenden Befehl ein, um die Datei ausführbar zu machen:

```
sudo chmod +x /opt/enginsight/<SkriptOrdnername>/<SkriptDateiname>.sh
```

{% hint style="info" %}
Vergiss dabei nicht, `<SkriptOrdnername>` und `<SkriptDateiname>` entsprechend zu ersetzen.
{% endhint %}
{% endstep %}

{% step %}

### Backup-Skript überprüfen

1. Überprüfe mit folgendem Befehl, ob du die richtigen Organisations-IDs und Pfade angegeben hast:

```
sudo head -n 60 /opt/enginsight/<SkriptOrdnername>/<SkriptDateiname>.sh
```

{% hint style="info" %}
Vergiss dabei nicht, `<SkriptOrdnername>` und `<SkriptDateiname>` entsprechend zu ersetzen.
{% endhint %}

2. **Optional**: Führe mit folgendem Befehl einen ShellCheck durch, falls du dieses Tool installiert hast:

```
shellcheck /opt/enginsight/<SkriptOrdnername>/<SkriptDateiname>.sh
```

{% hint style="info" %}
Vergiss dabei nicht, `<SkriptOrdnername>` und `<SkriptDateiname>` entsprechend zu ersetzen.
{% endhint %}
{% endstep %}

{% step %}

### Backup-Skript ausführen und Ergebnis prüfen

Führe nun das Backup-Skript mit folgendem Befehl aus:

```
sudo /opt/enginsight/<SkriptOrdnername>/<SkriptDateiname>.sh
```

{% hint style="info" %}
Vergiss dabei nicht, `<SkriptOrdnername>` und `<SkriptDateiname>` entsprechend zu ersetzen.
{% endhint %}

Prüfe das Ergebnis bspw. wie folgt:

```
ls -la /var/backups/enginsight/<BackupBasisordner>
find /var/backups/enginsight/<BackupBasisordner> -maxdepth 3 -type f | head
```

{% hint style="info" %}
Vergiss dabei nicht, `<BackupBasisordner>` entsprechend zu ersetzen.
{% endhint %}
{% endstep %}
{% endstepper %}

***
