> 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-aktualisiere-ich-die-enginsight-datenbank-von-mongodb-5.0-auf-mongodb-8.0.md).

# Wie aktualisiere ich die Enginsight Datenbank von MongoDB 5.0 auf MongoDB 8.0?

Enginsight nutzt MongoDB als Datenbank. Im Folgenden zeigen wir dir, welche Schritte du vornehmen musst, um MongoDB zu aktualisieren.&#x20;

Bitte beachte, dass die Aktualisierung von MongoDB 5.0 auf MongoDB 8.0 auch ein Update der Debian-Version des Enginsight Datenbankservers von Debian 11 auf 12 erfordert.

***

## Deinstallation von MongoDB 5.0

{% stepper %}
{% step %}

### Enginsight Applikationsserver stoppen

{% hint style="danger" %}
**Bitte beachte**: Dieser Schritt ist vor allen Änderungen an der Datenbank *zwingend notwendig*!
{% endhint %}

1. Logge dich auf dem Enginsight Applikationsserver ein und navigiere mit folgendem Befehl in das Enginsight Installationsverzeichnis:

```
cd /opt/enginsight/enterprise
```

2. Stoppe nun den Applikationsserver mit folgendem Befehl:

```
sudo docker-compose down
```

{% endstep %}

{% step %}

### MongoDB-Konfiguration sichern

{% hint style="danger" %}
**Bitte beachte**: Dieser Schritt ist vor der Aktualisierung von MongoDB *zwingend notwendig*, da während des Updates die Datenbank-Konfiguration unter `/etc/mongod.conf` gelöscht wird!
{% endhint %}

1. Logge dich auf dem Enginsight Datenbankserver ein.
2. Zeige mit folgendem Befehl die MongoDB-Konfigurationsdatei `mongod.conf` an:

```
sudo cat /etc/mongod.conf
```

3. Erstelle eine Sicherheitskopie der Datei und speichere diese an einem sicheren Ort deiner Wahl.
   {% endstep %}

{% step %}

### Datenbank-Backup erstellen

{% hint style="danger" %}
**Bitte beachte**: Dieser Schritt ist vor der Aktualisierung von MongoDB *zwingend notwendig*!
{% endhint %}

Führe nun das Datenbank-Backup, einen sogenannten MongoDB-Dump, aus.

{% hint style="warning" %}
**Bitte beachte**: Die benötigten Befehle für einen Mongo-DumpDB können variieren, z.B. wenn deine Datenbank per SSL/TLS verschlüsselt ist.
{% endhint %}

{% hint style="success" icon="lightbulb-exclamation" %}
Mehr Informationen, welche Optionen es für einen MongoDB-Dump gibt, findest du in der Knowledge Base: [Wie erstelle ich ein Backup meiner Enginsight Instanz?](/docs/knowledge-base/datenbank/wie-erstelle-ich-ein-backup-meiner-enginsight-instanz.md)
{% endhint %}
{% endstep %}

{% step %}

### MongoDB 5.0 deinstallieren

1. Deinstalliere mit folgenden Befehlen die veraltete Version von MongoDB:

```
sudo systemctl stop mongod
sudo apt remove mongodb-org
sudo apt autoremove
```

2. Lösche Datenbanküberreste mit folgendem Befehl:

```
sudo rm -rf /var/lib/mongodb
```

{% endstep %}

{% step %}

### Debian auf dem Datenbankserver aktualisieren

1. Führe nun die Aktualisierung von Debian 11 auf Debian 12 auf dem Datenbankserver durch. Dabei wird das MongoDB-Repository automatisch auf Version 8.0 aktualisiert. Nutze hierfür das Update Skript aus folgendem Artikel in der Knowledge Base: [Wie aktualisiere ich meine Enginsight Server von Debian 11 auf Debian 12?](/docs/knowledge-base/updates/wie-aktualisiere-ich-meine-enginsight-server-von-debian-11-auf-debian-12.md)
2. Starte den Datenbankserver mit folgendem Befehl neu:

```
sudo systemctl reboot
```

{% hint style="danger" %}
**Bitte beachte**: Ein Neustart des Datenbankservers ist nach der Ausführung des Update-Skripts *zwingend erforderlich*!
{% endhint %}
{% endstep %}
{% endstepper %}

***

## Neuinstallation und Einrichtung von MongoDB 8.0

{% stepper %}
{% step %}

### MongoDB neu installieren

Installiere MongoDB nach dem Neustart des Datenbankservers mit folgendem Befehl neu:

```
sudo apt install mongodb-org
```

{% endstep %}

{% step %}

### MongoDB-Konfigurationsdatei wiederherstellen und anpassen

1. Öffne mit folgendem Befehl die MongoDB-Konfigurationsdatei `mongod.conf`:

```
sudo nano /etc/mongod.conf
```

2. Füge die Sicherheitskopie ein, um die ursprüngliche Datenbank-Konfiguration wiederherzustellen.
3. Navigiere zum Abschnitt `storage`. Dieser sah bisher so aus:

<pre><code># Where and how to store data.
storage:
  dbPath: /var/lib/mongodb
<strong>  journal:
</strong><strong>    enabled: true
</strong>#  engine:
#  mmapv1:
#  wiredTiger:
</code></pre>

4. Entferne den Parameter `journal` mitsamt seiner Unteroptionen, da dieser nicht mehr unterstützt wird. \
   \
   Navigiere dazu zu den entsprechenden Zeilen und nutze **Strg + k**, um die Zeilen jeweils zu löschen:

```
# Where and how to store data.
storage:
  dbPath: /var/lib/mongodb
#  engine:
#  mmapv1:
#  wiredTiger:
```

5. Navigiere zum Abschnitt `security`, falls dieser vorhanden ist, und kommentiere ihn mitsamt seiner Unteroptionen aus, indem du vor jede Zeile ein Raute-Zeichen **#** setzt.
6. Speichere die Änderungen in der Konfigurationsdatei (**Strg**+**o**) und bestätige den Speicherprozess. Schließe die Datei (**Strg**+**x**).
7. Starte den Datenbank-Service mit folgendem Befehl neu:

```
sudo systemctl enable --now mongod
```

{% endstep %}

{% step %}

### Replica-Set einrichten

Die Befehle für die Einrichtung des Replica-Sets unterscheiden sich je nachdem, ob du eine SSL/TLS-Verschlüsselung nutzt oder nicht.

**Einrichtung des Replica-Sets ohne SSL/TLS-Verschlüsselung**

<pre><code>mongosh \ 
<strong>    --host "&#x3C;IPAdresseDatenbankserver>:27017" \
</strong>		--eval "rs.initiate({
	    _id: \"rs0\", 
	    members: [{
	      _id: 0,
<strong>	      host: \"&#x3C;IPAdresseDatenbankserver>:27017\"
</strong>	    }]
	})"
</code></pre>

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

**Einrichtung des Replica-Sets mit SSL/TLS-Verschlüsselung**

<pre><code>mongosh \ 
		--host "&#x3C;IPAdresseDatenbankserver>:27017" \ 
<strong>		--tls \
</strong><strong>		--tlsCAFile /etc/enginsight/ssl/mongodbCA.crt \
</strong><strong>		--tlsCertificateKeyFile /etc/enginsight/ssl/mongodb.pem \
</strong>		--eval "rs.initiate({
	    _id: \"rs0\", 
	    members: [{
	      _id: 0,
	      host: \"&#x3C;IPAdresseDatenbankserver>:27017\"
	    }]
	})"
</code></pre>

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

{% step %}

### Datenbank-Benutzer wiederherstellen

{% hint style="warning" %}
**Bitte beachte**: Dieser Schritt ist nur notwendig, wenn du auch zuvor Benutzer für die Datenbank konfiguriert hattest.
{% endhint %}

Die Befehle für die Wiederherstellung der Datenbank-Benutzer `mongoAdminUser` und `mongoDefaultUser` unterscheiden sich je nachdem, ob du eine SSL/TLS-Verschlüsselung nutzt oder nicht.

**Wiederherstellung der Datenbank-Benutzer** **ohne SSL/TLS-Verschlüsselung**

<pre><code>mongosh \
<strong>		--host "&#x3C;IPAdresseDatenbankserver>:27017" \
</strong>		--eval "db.createUser({user:'mongoAdminUser',pwd:\"$(&#x3C;/etc/enginsight/mongoAdminUserPassword)\",roles:['userAdminAnyDatabase','clusterMonitor']})" admin
mongosh \
<strong>		--host "&#x3C;IPAdresseDatenbankserver>:27017" \
</strong>		--eval "db.createUser({user:'mongoDefaultUser',pwd:\"$(&#x3C;/etc/enginsight/mongoDefaultUserPassword)\",roles:[{role:'readWrite',db:'enginsight'}]})" enginsight
</code></pre>

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

**Wiederherstellung der Datenbank-Benutzer** **mit SSL/TLS-Verschlüsselung**

<pre><code>mongosh \
<strong>		--host "&#x3C;IPAdresseDatenbankserver>:27017" \
</strong>		--tls \
		--tlsCAFile /etc/enginsight/ssl/mongodbCA.crt \
		--tlsCertificateKeyFile /etc/enginsight/ssl/mongodb.pem \
		--eval "db.createUser({user:'mongoAdminUser',pwd:\"$(&#x3C;/etc/enginsight/mongoAdminUserPassword)\",roles:['userAdminAnyDatabase','clusterMonitor']})" admin
mongosh \
<strong>		--host "&#x3C;IPAdresseDatenbankserver>:27017" \
</strong>		--tls \
		--tlsCAFile /etc/enginsight/ssl/mongodbCA.crt \
		--tlsCertificateKeyFile /etc/enginsight/ssl/mongodb.pem \
		--eval "db.createUser({user:'mongoDefaultUser',pwd:\"$(&#x3C;/etc/enginsight/mongoDefaultUserPassword)\",roles:[{role:'readWrite',db:'enginsight'}]})" enginsight
</code></pre>

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

{% step %}

### Optional: MongoDB-Konfigurationsdatei erneut anpassen

{% hint style="warning" %}
**Bitte beachte**: Dieser Schritt muss nur vorgenommen werden, wenn du zuvor den Abschnitt `security` auskommentiert hast.
{% endhint %}

1. Öffne mit folgendem Befehl die MongoDB-Konfigurationsdatei `mongod.conf`:

```
sudo nano /etc/mongod.conf
```

2. Navigiere zum Abschnitt `security`, falls du diesen zuvor auskommentiert hast, und kommentiere ihn mitsamt seiner Unteroptionen wieder ein, indem du vor den entsprechenden Zeilen das Raute-Zeichen **#** wieder entfernst.
3. Speichere die Änderungen in der Konfigurationsdatei (**Strg**+**o**) und bestätige den Speicherprozess. Schließe die Datei (**Strg**+**x**).
4. Starte MongoDB mit folgendem Befehl neu:

```
sudo systemctl restart mongod
```

{% endstep %}

{% step %}

### Datenbank-Backup wiederherstellen

Stelle nun dein Datenbank-Backup wieder her.

{% hint style="warning" %}
**Bitte beachte**: Die benötigten Befehle für die Wiederherstellung eines MongoDB-Dumps können variieren, z.B., wenn deine Datenbank per SSL/TLS verschlüsselt ist. Du findest alle Optionen hier: [Wie erstelle ich ein Backup meiner Enginsight Instanz?](/docs/knowledge-base/datenbank/wie-erstelle-ich-ein-backup-meiner-enginsight-instanz.md)
{% endhint %}
{% endstep %}

{% step %}

### Applikationsserver wieder starten

Nun kannst du den Applikationsserver mit allen Diensten wieder starten.

1. Gehe zurück zum Applikationsserver.
2. Navigiere mit folgendem Befehl ins Enginsight Installationsverzeichnis:

```
cd /opt/enginsight/enterprise
```

3. Führe mit folgendem Befehl das Setup-Skript für den Applikationsserver neu aus und bestätige alle Abfragen mit der **Enter**-Taste:

```
sudo ./setup.sh
```

{% endstep %}
{% endstepper %}

***
