Migration MariaDB zu PostgreSQL
Auf dieser Seite
Einleitung
Dieser Leitfaden beschreibt den Prozess der Datenbankmigration für eine Relution-Instanz innerhalb einer Docker-Umgebung.
Voraussetzungen
Bevor Sie mit der Migration beginnen, stellen Sie sicher, dass folgende Bedingungen erfüllt sind:
- Speicherplatz: Mindestens so viel freier Speicherplatz wie die aktuelle MariaDB-Datenbank groß ist (1:1 Verhältnis).
- S3 Speicher: Ein kompatibler S3-Speicher muss bereits eingerichtet sein.
Veraltet: Dokumentation zu S3/MinIO. - Version: Die Relution-Instanz sollte auf die die Version 26.0.0 aktualisiert werden, mindestens jedoch auf Version 5.31.0 aktualisiert sein.
Datensicherung (Optional)
Falls keine Snapshots der virtuellen Maschine oder externe Backups vorhanden sind, führen Sie einen manuellen Export und eine Dateisicherung durch.
Export der MariaDB in eine SQL-Datei
docker exec docker_mariadb mariadb-dump -u relution -p --max_allowed_packet=5G relution > relution.sqlBackup der Konfigurationsdateien
cd /opt/relution/ && zip -r backup.zip ./*
Vorbereitung der Umgebung
Relution aktualisieren
Stellen Sie sicher, dass Sie auf dem neuesten Stand sind:
cd /opt/relution/ && docker compose pull && docker compose up -d
Dienste stoppen
Stoppen Sie den Relution-Container, um Datenkonsistenz während der Vorbereitung zu gewährleisten:
docker compose down relution
Docker-Konfiguration anpassen
Ergänzen Sie Ihre docker-compose.yml. Fügen Sie die Services für pgloader und die neue database (PostgreSQL) hinzu und passen Sie den relution-Block an.
Neue Services hinzufügen
services:
pgloader:
image: dimitri/pgloader:latest
networks:
- relution-network
volumes:
- "./pgloader.load:/pgloader.load"
tty: true
database:
image: postgres:18
restart: unless-stopped
container_name: database
environment:
- TZ=Europe/Berlin
- POSTGRES_DB=relution
- POSTGRES_USER=relution
- POSTGRES_PASSWORD=$PASSWORD
expose:
- "5432"
volumes:
- "postgresql:/var/lib/postgresql"
networks:
- relution-network
Bestehenden Relution-Block anpassen
Ändern Sie die Abhängigkeiten und fügen Sie das Migrations-Argument hinzu:
relution:
image: relution/relution:latest
restart: on-failure # Geändert von always auf on-failure
container_name: docker_relution
networks:
relution-network:
aliases:
- relution-docker
depends_on:
- database # Geändert von mariadb
environment:
- TZ=Europe/Berlin
- RELUTION_ARGUMENTS='--database-migration-only' # Neu hinzugefügt
volumes:
mariadb:
postgresql: # Neu hinzugefügt
pgloader Konfiguration
- Laden Sie die Datei pgloader.load in das Verzeichnis
/opt/relution/herunter. - Passen Sie die Konfiguration an Ihre Umgebung an.
FROM mysql://relution:dbpassword@mariadb-docker:3306/relution
INTO postgresql://relution:dbpassword@database:5432/relution
Datenbank-Schema initialisieren
Passen Sie zuerst die application.yml an, damit Relution weiß, dass nun PostgreSQL genutzt wird:
relution:
database:
type: postgresql
url: jdbc:postgresql://database/relution?useServerPrepStmts=true
username: relution
password: $PASSWORD
Starten Sie nun PostgreSQL und Relution. Relution wird aufgrund des Flags --database-migration-only nur das Schema in PostgreSQL erstellen und sich dann beenden.
docker compose up -d database && docker compose up relution
Der Prozess ist abgeschlossen, wenn der Container mit Code 0 beendet wurde:
docker_relution exited with code 0

Datenmigration durchführen
Starten Sie den pgloader-Container und führen Sie die Migration der Daten von MariaDB zu PostgreSQL aus:
docker compose up -d pgloader && docker compose exec pgloader bash
Innerhalb des Containers führen Sie den Migrationsbefehl aus:
pgloader pgloader.load

Bereinigung und Abschluss
Nach erfolgreicher Migration müssen die temporären Konfigurationen und der alte MariaDB-Container entfernt werden.
- In der
docker-compose.ymlentfernen:
- Den gesamten Block
mariadb:unterservices. - Den Block
pgloader:unterservices. - Das Volume
mariadb:untervolumes.
- Im
relutionBlock anpassen:
restart: unless-stopped(wieder zurückstellen aufalways).- Entfernen der Zeile:
- RELUTION_ARGUMENTS=--database-migration-only.
- Aufräumen:
rm pgloader.load
Dienste neu starten: Fahren Sie alles herunter, um verwaiste Container zu löschen, und starten Sie das System neu:
docker compose down --remove-orphans && docker compose up -d
Die Migration ist damit abgeschlossen und Relution läuft nun nativ auf PostgreSQL.