DecaTec

Home-Server | Linux | Nextcloud | Raspberry Pi | Programmierung | Fotografie

Nextcloud: Migration der Datenbank von MySQL/MariaDB auf PostgreSQL

Nextcloud PostgreSQL Logo

PostgreSQL ist ein Datenbank-System, welches mittlerweile von vielen verschiedenen Programmen genutzt wird (z.B. Matrix Synapse, Mastodon, oder auch PeerTube). Im direkten Vergleich zu MySQL/MariaDB ist PostgreSQL ein moderneres, objektrelationales Datenbankmanagementsystem (ORDBMS). MySQL/MariaDB sind lediglich relationale Datenbanksysteme (RDBMS). Nicht zuletzt ist PostgreSQL in den meisten Fällen performanter als MySQL/MariaDB.

Da ich mit PostgreSQL schon in einigen Projekten einsetzen konnte, bin ich mittlerweile ein Fan dieses Datenbanksystems. Nextcloud unterstützt neben MySQL/MariaDB ebenso PostgreSQL. Auch hier merkt man Änderungen: Die „Schwuppdiziät“ der Cloud ist mit PostgreSQL um einiges besser.

Da meine Empfehlung in den vergangenen Artikeln immer eher in Richtung MariaDB als Datenbanksystem für Nextcloud gegangen sind, soll dieser Artikel die Migration der Datenbank von MySQL/MariaDB auf PostgreSQL beschreiben.

Als Grundlage dient wie immer der Artikel Nextcloud auf Ubuntu Server 20.04 LTS mit nginx, MariaDB, PHP, Let’s Encrypt, Redis und Fail2ban.

Übrigens kann eine Datenbank-Migration nicht nur „in einer Richtung“ durchgeführt werden, sondern es kann eine Migration in jedes von Nextcloud unterstütze Datenbank-System (MySQL/MariaDB, PostgreSQL und SQLite) vorgenommen werden.

Installation PostgreSQL

Zunächst muss das Datenbank-System installiert werden. Dazu empfehle ich, die Version aus den offiziellen PostgreSQL-Paketquellen zu nutzen, da die Version, die in den Ubuntu Paketquellen enthalten ist, schon ziemlich alt ist.

Hier wird erst einmal das entsprechende Repository eingebunden:

sudo sh -c 'echo "deb [arch=amd64] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

Anschließend muss der Repository-Key noch auf dem System bekannt gemacht werden:

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

Nun kann PostgreSQL auch schon installiert werden:

apt update && apt install postgresql

Damit PHP mit PostgreSQL zusammen arbeitet, ist zudem noch ein PHP-Paket nachzuinstallieren:

apt install php-pgsql

Die Installation von PostgreSQL ist damit auch schon abgeschlossen.

Optional kann das PostgreSQL noch auf das jeweilige System optimiert werden. Die Seite PGTune ist hier ein guter Ansatzpunkt.

Nextcloud-Datenbank in PostgreSQL anlegen

Bevor nun die eigentliche Konvertierung gestartet werden kann, muss die Datenbank und ein entsprechender User über die PostgreSQL-Kommandozeile angelegt werden:

sudo -u postgres psql

Folgende Befehle legen nun den Benutzer und die Datenbank an. nextcloud_db und nextcloud_db_user sind hier die beispielhaften Namen der Datenbank bzw. des Benutzers. Ebenso muss ein Passwort für den DB-User angegeben werden:

CREATE USER nextcloud_db_user WITH PASSWORD 'pAsSw0rD';
CREATE DATABASE nextcloud_db TEMPLATE template0 ENCODING 'UNICODE';
ALTER DATABASE nextcloud_db OWNER TO nextcloud_db_user;
GRANT ALL PRIVILEGES ON DATABASE nextcloud_db TO nextcloud_db_user;

Die PostgreSQL-Kommanozeile wird daraufhin durch folgenden Befehl beendet:

\q

Damit ist die Datenbank schon für die Migration vorbereitet.

Nextcloud-Datenbank migrieren

Bevor die Datenbank-Migration angestoßen wird, sollte in jedem Fall ein Backup der kompletten Nextcloud-Instanz angefertigt werden. Bei der Migration kann es normalerweise nicht passieren, dass die Nextcloud „zerschossen“ wird, aber man weiß ja nie. Für das Backup können z.B. die bekannten Nextcloud Backup-/ und Restore-Skripte verwendet werden.

Die eigentliche Konvertierung wird nun mit einem OCC-Befehl angestoßen:

sudo -u www-data php occ db:convert-type --all-apps --password="pAsSw0rD" pgsql nextcloud_db_user 127.0.0.1 nextcloud_db

Hier sind folgende Parameter zu beachten:

  • –all-apps: Sorgt dafür, dass auch die Tabellen deaktivierter Apps konvertiert werden.
  • –password: Das Passwort des Nextcloud-Datenbank-Benutzers wie es bei der Anlage der Datenbank angegeben wurde.
  • pgsql: Es soll eine Konvertierung nach PostgreSQL stattfinden
  • Am Ende werden noch der Datenbank-Benutzer, die IP des Zielsystems (in diesem Fall localhost, also 127.0.0.1) und der Name der Datenbank selbst angegeben. Diese Angaben müssen natürlich wieder mit jenen übereinstimmen, die bei der Anlage der Datenbank genutzt wurden.

Nach dem Anlegen des Datenbank-Schemas wird man nun nochmal gefragt, ob man die Migration nun durchführen möchte. Die anschließenden Schritte können nun eine ganze Weile dauern, es wird aber immer eine Fortschrittsanzeige angezeigt.

Wenn der Vorgang abgeschlossen ist, sollte die Cloud wieder wie gewohnt verfügbar sein. Nun lohnt ein Blick in die Admin-Settings unter System: Hier sollte nun im Bereich Datenbank die Nutzung von PostgreSQL angezeigt werden:

PostgreSQL wird als Datenbank-System für Nextcloud genutzt
PostgreSQL wird als Datenbank-System für Nextcloud genutzt

Damit ist die Migration der Datenbank abgeschlossen. Es kann aber nicht schaden, alle Apps auf Funktionstüchtigkeit zu prüfen.

MariaDB/MySQL Datenbank löschen

Wenn es bei der Datenbank-Migration keine Probleme gab, wird die alte MariaDB/MySQL-Datenbank nicht mehr benötigt und kann daher gelöscht werden. Ich empfehle, mit diesem Schritt etwas abzuwarten und die Datenbank erst zu löschen, wenn sicher gestellt ist, dass die eigene Nextcloud-Instanz problemlos mit PostgreSQL funktioniert.

Um die alte Datenbank zu löschen, wird die MySQL-Kommandozeile genutzt:

mysql -u root -p

Nach der Eingabe des Passworts des root-Benutzers der Datenbank werden die Nextcloud-Datenbank und der dazugehörige User entfernt:

drop database nextcloud_db;
drop user nextcloud_db_user@localhost;
exit

nextcloud_db und nextcloud_db_user sind hier wieder durch die Namen der Datenbank bzw. des Users zu ersetzen, die bei der ursprünglichen Installation angegeben wurden.

Troubleshooting

Es kann passieren, dass es bei der Konvertierung zu Fehlern kommt. Meistens sind davon die Tabellen bestimmter Apps betroffen, wie im folgenden Screenshot (hier war die „News“ App der Übeltäter):

Nextcloud: Fehler bei der Datenbank-Konvertierung
Nextcloud: Fehler bei der Datenbank-Konvertierung

Keine Panik: Wenn die Migration auf einen Fehler stößt, bricht diese einfach ab und die alte Datenbank (MySQL/MariaDB) bleibt weiterhin aktiv.

In diesen Fällen (Migration bricht auf Grund einer bestimmten App ab) reicht es aus, die App in der Nextcloud vor der Migration zu deaktivieren. Hier reicht erfahrungsgemäß die Deaktivierung aus, ein Entfernen der App ist meist nicht notwendig.

Anschließend kann die Konvertierung erneut angestoßen werden. Wenn die vorherige Konvertierung jedoch wegen eines Fehlers nicht beendet werden konnte, ist die PostgreSQL-Datenbank schon z.T. gefüllt. Bevor eine erneute Konvertierung gestartet werden kann, muss zuvor die Datenbank und der dazugehörige User manuell aus der Datenbank entfernt werden. Dies geschieht wiederum über die PostgreSQL-Kommandozeile:

sudo -u postgres psql

Folgende Befehle sind zum Löschen zu verwenden:

DROP DATABASE nextcloud_db;
DROP USER nextcloud_db_user;

Anschließend können (immer noch in der gleichen Kommandozeilen-Sitzung) der Benutzer und die Datenbank neu angelegt werden (siehe oben).

Beendet wird die PostgreSQL-Kommandozeile wieder durch den Befehl \q.

Fazit

Nach der Migration auf PostgreSQL als Nextcloud-Datenbank sollte man schon recht schnell einen Performance-Gewinn in der Cloud feststellen können. Erfahrungsgemäß profitieren davon sowohl größere, als auch kleinere Nextcloud-Instanzen.

Was meint ihr zu diesem Thema? Habt ihr bereits Erfahrungen bzgl. PostgreSQL als Datenbanksystem für Nextcloud? Oder bleibt ihr doch bei der „traditionellen Variante“ mit MySSQL/MariaDB? Hinterlasst mir dazu doch einfach einen Kommentar.

Weiterführende Artikel

Links

, , , , , ,

Kommentare: 7

  • Hans sagt:

    Hallo Jan,

    und wieder ein toller Blog, vielen Dank dafür.

    PostgreSQL habe ich mir bis jetzt noch nicht angeschaut, eher MariaDB und beruflich Microsoft SQL.

    Ich werde mir mal PostgreSQL auf einer VM genauer anschauen.

    Gruß Hans

  • Ronald sagt:

    Hat super funktioniert, ganz ohne Fehler und geht auch gefühlt flinker – vielen Dank Jan!

  • Thomas sagt:

    Hallo Jan,

    hätte hier eine Frage bevor ich die Migration in Angriff nehme, muss eigentlich auch das Backup Script das Du in Deinem Forum für die Nextcloud vorgestellt hast angepasst werden.

    • Mark sagt:

      Hallo Thomas,

      ich glaube du musst im Skript die Variable databaseSystem von „mariadb“ auf „postgresql“ ändern. Der Rest ist glaube ich dynamisch.

      • Jan sagt:

        Hi Mark und Thomas,

        ganz genau: Die Skripte sind sowohl mit MySQL/MariaDB, als auch mit PostgreSQL kompatibel. Hier muss nur die Art des DB-Systems in der entsprechenden Variable mit angegeben werden. DB-Benutzername bzw. -Passwort sind ggf. auch noch zu ändern, wenn diese bei der Migration geändert wurden.

        Gruß,
        Jan

  • Mark sagt:

    Super Anleitung! Es hat alles reibungslos funktioniert.
    Danke!

  • Samuel sagt:

    Hi,

    hat alles soweit funktioniert, jedoch sind die Apps verschwunden.

    Ist das ein bekannter möglicher Fehler?

    MfG
    Samuel

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.