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, s’assurer 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, effectuer un export manuel ainsi qu’une sauvegarde des fichiers.

  1. Export de MariaDB dans un fichier SQL

    docker exec docker_mariadb mariadb-dump -u relution -p --max_allowed_packet=5G relution > relution.sql
    
  2. Sauvegarde des fichiers de configuration

    cd /opt/relution/ && zip -r backup.zip ./*
    

Préparation de l’environnement

Mettre à jour Relution

S’assurer d’être à jour :

cd /opt/relution/ && docker compose pull && docker compose up -d

Arrêter les services

Arrêter 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éter le docker-compose.yml. Ajouter les services pgloader et la nouvelle database (PostgreSQL), et adapter le bloc relution.

Ajouter les nouveaux services

services:
  pgloader:
    image: ghcr.io/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

Modifier les dépendances et ajouter 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: # remplacer l'ancienne notation en liste (ex. "- TZ=Europe/Berlin") si présente, ne pas la mélanger avec la notation par mapping
      TZ: "Europe/Berlin"
      RELUTION_ARGUMENTS: "--database-migration-only" # Neu hinzugefügt

volumes:
  mariadb:
  postgresql: # Neu hinzugefügt

Configuration de pgloader

  1. Télécharger le fichier pgloader.load → dans le répertoire /opt/relution/.
  2. Adapter la configuration à l’environnement concerné.
     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

Adapter 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émarrer 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

Le conteneur Docker s’arrête avec le code 0 après l’initialisation réussie du schéma


Effectuer la migration des données

Démarrer le conteneur pgloader et exécuter 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écuter la commande de migration :

pgloader pgloader.load

Migration des données via pgloader de MariaDB vers PostgreSQL terminée avec succès


Nettoyage et finalisation

Après une migration réussie, les configurations temporaires et l’ancien conteneur MariaDB doivent être supprimés.

  1. Supprimer dans le docker-compose.yml :

    • L’ensemble du bloc mariadb: sous services.
    • Le bloc pgloader: sous services.
    • Le volume mariadb: sous volumes.
  2. Adapter le bloc relution :

    • restart: unless-stopped (revenir à always).
    • Supprimer la ligne : - RELUTION_ARGUMENTS=--database-migration-only.
  3. Nettoyer :

    rm pgloader.load
    

Redémarrer les services : Arrêter tout pour supprimer les conteneurs orphelins, puis redémarrer 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.

Top