Migration de MariaDB vers PostgreSQL
Ce guide décrit le processus de migration de base de données pour une instance Relution au sein d’un environnement Docker.
Prérequis
Avant de commencer la migration, assurez-vous que les conditions suivantes sont remplies :
- Espace disque : Au moins autant d’espace disque libre que la taille actuelle de la base de données MariaDB (rapport 1:1).
- Stockage S3 : Un stockage compatible S3 doit déjà être configuré.
Documentation sur S3/SeaweedFS → - Version : L’instance Relution devrait être mise à jour vers la version 26.0.0, ou au minimum vers la version 5.31.0.
Sauvegarde des données (optionnel)
Si aucun snapshot de la machine virtuelle ni de sauvegarde externe n’est disponible, effectuez un export manuel ainsi qu’une sauvegarde des fichiers.
Export de MariaDB dans un fichier SQL
docker exec docker_mariadb mariadb-dump -u relution -p --max_allowed_packet=5G relution > relution.sqlSauvegarde des fichiers de configuration
cd /opt/relution/ && zip -r backup.zip ./*
Préparation de l’environnement
Mettre à jour Relution
Assurez-vous d’être à jour :
cd /opt/relution/ && docker compose pull && docker compose up -d
Arrêter les services
Arrêtez le conteneur Relution afin de garantir la cohérence des données pendant la préparation :
docker compose down relution
Adapter la configuration Docker
Complétez votre docker-compose.yml. Ajoutez les services pgloader et la nouvelle database (PostgreSQL), et adaptez le bloc relution.
Ajouter les nouveaux services
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
Adapter le bloc Relution existant
Modifiez les dépendances et ajoutez l’argument de migration :
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
Configuration de pgloader
- Téléchargez le fichier pgloader.load → dans le répertoire
/opt/relution/. - Adaptez la configuration à votre environnement.
FROM mysql://relution:dbpassword@mariadb-docker:3306/relution
INTO postgresql://relution:dbpassword@database:5432/relution
Initialiser le schéma de la base de données
Adaptez d’abord l’application.yml afin que Relution sache qu’il doit désormais utiliser PostgreSQL :
relution:
database:
type: postgresql
url: jdbc:postgresql://database/relution?useServerPrepStmts=true
username: relution
password: $PASSWORD
Démarrez maintenant PostgreSQL et Relution. En raison du flag --database-migration-only, Relution va uniquement créer le schéma dans PostgreSQL, puis s’arrêter.
docker compose up -d database && docker compose up relution
Le processus est terminé lorsque le conteneur s’est arrêté avec le code 0 :
docker_relution exited with code 0

Effectuer la migration des données
Démarrez le conteneur pgloader et exécutez la migration des données de MariaDB vers PostgreSQL :
docker compose up -d pgloader && docker compose exec pgloader bash
À l’intérieur du conteneur, exécutez la commande de migration :
pgloader pgloader.load

Nettoyage et finalisation
Après une migration réussie, les configurations temporaires et l’ancien conteneur MariaDB doivent être supprimés.
Supprimer dans le
docker-compose.yml:- L’ensemble du bloc
mariadb:sousservices. - Le bloc
pgloader:sousservices. - Le volume
mariadb:sousvolumes.
- L’ensemble du bloc
Adapter le bloc
relution:restart: unless-stopped(revenir àalways).- Supprimer la ligne :
- RELUTION_ARGUMENTS=--database-migration-only.
Nettoyer :
rm pgloader.load
Redémarrer les services : Arrêtez tout pour supprimer les conteneurs orphelins, puis redémarrez le système :
docker compose down --remove-orphans && docker compose up -d
La migration est ainsi terminée et Relution fonctionne désormais nativement sur PostgreSQL.