# 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 und fahre in der **Konsole** fort.

ODER

Verbinde dich per Fernzugriff über SSH (Secure Shell) von deinem Linux- oder Mac-System aus auf den Datenbankserver.

1. Navigiere zum **Terminal** auf deinem Linux- oder Mac-System.
2. Gib den Befehl `ssh <BenutzernameDatenbankserver>@<IPAdresseDatenbankserver>` ein.

{% hint style="info" %}
Vergiss dabei nicht, `<BenutzernameDatenbankserver>` mit dem Benutzernamen zu ersetzen, den du bei der Datenbankserver-Installation für das Datenbankserver-Benutzerkonto angelegt hast. Ersetze `<IPAdresseDatenbankserver>` entsprechend.
{% endhint %}
{% 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 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 entsprechend zu ersetzen:

* `<OrganisationsID1>`
* `<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 %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.enginsight.com/docs/knowledge-base/datenbank/wie-erstelle-ich-in-enginsight-ein-backup-einer-oder-mehrerer-organisationen.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
