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.

  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

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

  1. Téléchargez le fichier pgloader.load → dans le répertoire /opt/relution/.
  2. 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

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

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ê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.

Top