Kontakt

Carsten Rieger IT Services
Am Danglfeld 8 | 83132 Pittenhart
Telefon: 08624.9009794
E-Mail: info@c-rieger.de

Nextcloud Datenbankmigration von MariaDB zu PostgreSQL

turnserver

Nextcloud bietet ein Migrations- und Konvertierungsmodul mittels der Nextcloud Kommandozeile an, um die Nextcloud-Datenbank von einer MariaDB-Datenbank zu einer PostgreSQL-Datenbank zu migrieren. Wir weisen darauf hin, dass ein vorheriges Backup obligatorisch ist, eine Downtime durch die Migration entsteht (Achtung, es können bei großen oc_filecache-Tabellen sehr lange Migrationslaufzeiten entstehen) und dieses Verfahren zuvor in einer Testumgebung zu validieren ist.

Inhaltsverzeichnis:

  1. Vorbereitungen
  2. Installation PostgreSQL
  3. Anpassungen PostgreSQL
  4. Migration
  5. Überprüfung der Nextcloud
  6. Weiterführende Informationen

Vorbereitungen

Nextcloud benötigt das entsprechende PHP-Modul, um mit der neuen und zukünftigen PostgreSQL-Datenbank kommunizieren zu können:

sudo -s
apt update && apt upgrade -V && apt install -y php8.1-pgsql

Starten Sie PHP neu

systemctl restart php8.1-fpm.service

Installation PostgresSQL

wget -O- https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /usr/share/keyrings/postgresql-archive-keyring.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/postgresql-archive-keyring.gpg] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
apt update && apt install postgresql

Legen Sie nun die Datenbank an, dazu melden wir uns zuerst am Datenbankserver an.

sudo -u postgres psql

Am Datenbankserver angemeldet önnen wir die Nextcloud-Datenbank, den Benutzer sowie das Passwort des Datenbankbenutzers einrichten. Dem Beispiel geschuldet setzen wir alle Bezeichnungen auf „nextcloud“:

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

Verlassen Sie den Datenbankserver mit ‚\q‚.

\q

Die neue, noch leere PostgreSQL-Datenbank steht nun bereits zur Verfügung.

Anpassungen PostgreSQL

Berechnen Sie die optimierte Konfiguration hier und passen dann die Datei postgresql.conf an.

systemctl stop postgresql

Anpssungsbeispiel für PostgreSQL 14, 4GB RAM, 4 Cores sowie ca. 200 Anwender:

# DB Version: 14
# OS Type: linux
# DB Type: web
# Total Memory (RAM): 4 GB
# CPUs num: 4
# Connections num: 200
# Data Storage: ssd
max_connections = 200
shared_buffers = 1GB
effective_cache_size = 3GB
maintenance_work_mem = 256MB
checkpoint_completion_target = 0.9
wal_buffers = 16MB
default_statistics_target = 100
random_page_cost = 1.1
effective_io_concurrency = 200
work_mem = 2621kB
min_wal_size = 1GB
max_wal_size = 4GB
max_worker_processes = 4
max_parallel_workers_per_gather = 2
max_parallel_workers = 4
max_parallel_maintenance_workers = 2

Nextcloud empfiehlt hier zudem diese PHP-Mindestkonfiguration:

nano /etc/php/8.1/mods-available/pgsql.ini
[...]
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0
[...]

Speichern und verlassen Sie diese Datei und starten PostgreSQL neu.

systemctl start postgresql.service php8.1-fpm.service

Datenbankmigration

Wir gehen zu diesem Zeitpounkt davon aus, dass Sie eine Sicherung ihres Systems erstellt haben! Der nachfolgende Konvertierungsbefehl verändert die bestehende MariaDB-Datenbank nicht, somit kann der Prozess bei auftretenden Problemen udn Fehlern jederzeit wiederholt werden.

Die Migration der Datenbank wird mit diesem Befehl gestartet:

sudo -u www-data php /var/www/nextcloud/occ db:convert-type --all-apps --password="nextcloud" pgsql nextcloud 127.0.0.1 nextcloud

Bricht dieser Prozess bspw. bei bestimmten Apps ab (deaktivieren Sie diese dann vor einem erneuten Versuch) so löschen Sie die PostgreSQL-Datenbank

DROP DATABASE nextcloud;
DROP USER nextcloud;

und erstellen diese neu:

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

Wiederholen Sie dann die Migration mit dem gleichen Kommando:

sudo -u www-data php /var/www/nextcloud/occ db:convert-type --all-apps --password="nextcloud" pgsql nextcloud 127.0.0.1 nextcloud

Überprüfung der Migration

Nach dem Abschluß der Migration wird innerhalb der Nextcloud-Administrationsseite bereits PostgreSQL als Datenbankbackend angezeigt – bitte prüfen Sie das im Webfrontend.

Die Einstellungen in der /var/www/nextcloud/config.php sehen exemplarisch wie folgt aus:

<?php
[...]
"dbtype" => "pgsql",
"dbname" => "nextcloud",
"dbuser" => "nextcloud",
"dbpassword" => "",
"dbhost" => "/var/run/postgresql",
"dbtableprefix" => "oc_",
[...]

Weitere Informationen stellt u.a. Nextcloud bereit. Nützliche PostgreSQL-Kommandos finden Sie hier.

Haben Sie das überprüft, so könn(t)en Sie die MariaDB-Datenbank sowie die Software löschen bzw. deinstallieren.

mysql -e "drop database nextcloud; drop user nextcloud@localhost;"

Somit ist die MariaDB-Nextclouddatenbank gelöscht. Möchten Sie auch die Software entfernen, so führen Sie folgendes Kommando aus.

apt purge mariadb-server

Weitere Details zum Entfernen von MariaDB finden Sie hier.

Weiterführende Informationen:

https://docs.nextcloud.com/server/latest/admin_manual/configuration_database/linux_database_configuration.html

https://docs.nextcloud.com/server/latest/admin_manual/configuration_database/linux_database_configuration.html#postgresql-database

https://mariadb.com/kb/en/uninstall-or-delete-mariadb-completely-for-re-installation/


Über Ihre Unterstützung (diese wird ordnungsgemäß versteuert!) würden sich meine Frau, meine Zwillinge und ich sehr freuen!