MySQL Tabelleneinträge in eine MongoDB-Datenbank übertragen

MongoDB Version 4.2.14 und MySQL 8.0.25, Fedora 33 in der Bash (Kommandozeile)

Man stelle sich vor, man hat Datenbankeinträge in MySQL eingeflogen und man möchte jetzt das in eine andere Datenbank importieren. Mir ist das so in den Sinn gekommen.

Als erstes sollte man sich überlegen in was für ein Dateiformat man für die Zwischenspeicherung verwenden möchte. Natürlich keine Excel-Datei, sondern universelle Formate. Ein Format ist das CSV (Comma-separted-values). CSV wird von MySQL auch ausgegeben und von MongoDB eingelesen.

Wer sich nicht sicher ist, welche Version er von MongoDB, MySQL und seinem Linux hat, der schaut nach.

Meine Ausgangsdatenbank heißt Corona und die Tabelle heißt Essen.

Ausgangsdatenbank

Man geht in die MySQL-Datenbank hinein und tippt dann den folgenden Befehl ein:

SELECT Datum, Inzidenzwert, Erkrankungen FROM Essen INTO OUTFILE '2020.csv';

Diese Datei 2020.csv wird in einem Root-Verzeichnis gespeichert. Also braucht man Root-Rechte.

Man kann natürlich jetzt alle Verzeichnisse absuchen, aber einfacher ist das mit dem Befehl:

find / -name 2020.csv

Das dauert eine kleine Weile. Die Datei findet man im Verzeichnis /var/lib/mysql/Corona/2020.csv

Um die Datei in den eigenen Ordner zu bringen, muss man diesen Befehl benutzen:

cp /var/lib/mysql/Corona/2020.csv /home/sven/Dokumente

Die Datei hat aber noch Root-Priviligen, um sie als normalen Anwender zu benutzen, wendet man diesen Befehl an:

chmod ugo+rw 2020.csv

Jetzt kann sie MongoDB lesen. Allerdings braucht die Datei noch Spaltenüberschriften, welche man dann die Datei eben schnell in einer Tabellenkalkulation erstellt. Wichtig ist, nicht vergessen, die Datei nur im .csv-Format zu speichern. Jetzt kann man sie in MongoDB importieren.

Die Datenbank muss, bevor man die CSV-Datei einfügt, existieren.

Wenn es noch keine Datenbank gibt, gibt man nach einander diese Befehle in MongoDB ein.

use Coronazahlen

db.create.Essen

Damit die Datenbank schon einmal einen Wert hat, habe ich mit folgenden Befehl schon einmal etwas eingefügt:

db.Essen.insertOne({x:1});

Jetzt kann man die Daten mit dem folgendem Befehl importieren

mongoimport -d Coronazahlen -c Essen --type CSV --file 2020.csv --headerline