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:
- Vorbereitungen
- Installation PostgreSQL
- Anpassungen PostgreSQL
- Migration
- Überprüfung der Nextcloud
- 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://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!