Passer de PostgreSQL à MariaDB
Les anciennes versions d'Agora rangeaient leurs données dans PostgreSQL, la version actuelle dans MariaDB : la reprise se fait à la première mise à jour et l'ancienne base reste intacte.
Mis à jour le 8 oct. 2026, 18 h 50
Sur cette page
- Avant de commencer
- Étapes
- Docker avec install.sh
- Panel (œuf) ou serveur Node.js
- Docker avec un compose écrit à la main
- Base externe (option avancée)
- Tu sais que c'est réussi quand…
- Si ça ne marche pas
- Pour aller plus loin
- Retrouver les valeurs en double
- Ce qui se passe pendant la conversion
- Combien de temps ça prend
- Revenir en arrière
- Ce qui est gardé, et jusqu'à quand
- Quand supprimer l'ancienne base
- Ce qui change pour toi après la conversion
En bref. Jusqu'à la version 0.2.0, Agora rangeait les données de son Hub (membres, forum, candidatures, réglages, licence) dans une base PostgreSQL. Les versions suivantes utilisent MariaDB. Si tu as une installation existante, la reprise des données se fait pendant la première mise à jour vers la version MariaDB : Agora lit l'ancienne base sans la modifier, recopie tout dans la nouvelle, vérifie la copie, puis démarre. Ton ancienne base reste intacte et, si la nouvelle version ne démarre pas, Agora remet tout seul la version d'avant dessus. Sur Docker, il y a une seule chose à faire avant : relancer la commande d'installation. Sur un panel (œuf) ou un serveur Node.js, tu mets à jour comme d'habitude.
Avant de commencer #
- Tu es concerné si ton installation date d'une version qui utilisait PostgreSQL. Une installation neuve démarre directement sur MariaDB : cette page ne te concerne pas, passe à Les deux bases d'Agora.
- Fais une sauvegarde Agora avant, par habitude : Administration → Agora → Sauvegardes → Télécharger un dump maintenant, puis garde le fichier hors du serveur. Ce
.sqlpris sur l'ancienne version ne pourra pas être restauré sur MariaDB (le format n'est pas le même) : il sert de trace, pas de plan B. Le vrai plan B est l'ancienne base, que la conversion ne touche pas (voir plus bas). - Prévois une courte coupure du site : il redémarre pendant la mise à jour. Choisis un moment calme.
- Garde un peu de place sur le disque : l'ancienne base reste en place et la nouvelle s'ajoute à côté.
- Les mots (base de données, migration, dump) sont dans le glossaire.
Étapes #
Docker avec install.sh #
Relance la commande d'installation, en
root(elle garde ta clé, ton.envet tes volumes) :curl -fsSL https://agorapanel.com/install.sh | shLe script prépare le passage et le dit :
Passage à MariaDB préparé : /opt/agora/.env réécrit (l'ancien est gardé dans /opt/agora/.env.avant-mariadb). Ton site reste sur PostgreSQL jusqu'à la mise à jour vers la version MariaDB…. Concrètement, il ajoute un conteneuragora-mariadb(volume neufagora_mariadb), garde ton ancien conteneuragora-dbet son volumeagora_db, et note l'adresse de l'ancienne base dansAGORA_CONVERT_FROM. Si l'amorçage (boot.mjs) change, il redémarre Agora (Amorçage mis à jour : redémarrage d'Agora…). Ton site continue de tourner sur l'ancienne version et l'ancienne base.Mets à jour Agora depuis Administration → Agora (voir Mettre à jour Agora) : c'est là que les données sont copiées.
Regarde la console (
docker logs -f agora) pendant la mise à jour : voir « Tu sais que c'est réussi quand… ».Ne coupe pas le serveur pendant la copie. Si ça arrive quand même, rien n'est perdu : voir « Si ça ne marche pas ».
Panel (œuf) ou serveur Node.js #
- Lance la mise à jour depuis Administration → Agora (voir Mettre à jour Agora). Le panel ou le serveur garde sa base PostgreSQL intégrée (dossier
.agora/pg), Agora en fait la copie dans sa nouvelle base MariaDB intégrée. - Premier passage avec un ancien amorçage. Si ton
boot.mjs(ouagora.mjssur un serveur Node.js) date d'avant MariaDB, la mise à jour s'arrête une première fois en le remplaçant elle-même (signature vérifiée) : la console ditcette version d'Agora tourne sur MariaDB : ton amorçage (boot.mjs) était trop ancien pour copier les données, il vient d'être mis à jour… Redémarre le serveur, puis relance la mise à jour. Fais-le : redémarre, puis relance la mise à jour. Rien n'a été modifié entre-temps. - Regarde la console pendant la copie : voir « Tu sais que c'est réussi quand… ».
Docker avec un compose écrit à la main #
Le nouveau compose lance MariaDB dans un volume neuf (mariadb_data). L'ancien volume PostgreSQL (db_data) n'est ni lu ni effacé, sauf pour la reprise des données, grâce à un service temporaire du profil legacy.
Remplace ton compose par le nouveau, et dans
.envremplacePOSTGRES_PASSWORDpar un mot de passe MariaDB :MARIADB_ROOT_PASSWORD(long, lettres et chiffres seulement).Ajoute dans
.envl'ancien mot de passe PostgreSQL et l'adresse de l'ancienne base :POSTGRES_PASSWORD=<ancien mot de passe PostgreSQL> AGORA_CONVERT_FROM=postgresql://agora:<ancien mot de passe PostgreSQL>@db-pg:5432/agoraLance l'ancienne base en plus de la nouvelle, puis Agora :
cd /opt/agora && docker compose --profile legacy up -dSuis le journal :
docker compose logs -f agora. La conversion s'exécute une fois, au premier démarrage.
Base externe (option avancée) #
Si tu avais apporté ta propre base PostgreSQL via DATABASE_URL :
- Crée une base MariaDB ou MySQL 8 vide, réservée à Agora, en
utf8mb4, et son utilisateur. - Remplace
DATABASE_URLpar son adresse :mysql://utilisateur:motdepasse@hote:3306/base. - Ajoute
AGORA_CONVERT_FROMavec l'ancienne adresse PostgreSQL (postgresql://…), puis redémarre ou lance la mise à jour : la reprise se fait comme ci-dessus. L'ancienne base n'est lue qu'en lecture.
Tu sais que c'est réussi quand… #
- La console montre, dans l'ordre :
✓ schéma à jour,reprise des données de l'ancienne base PostgreSQL (elle n'est pas modifiée)…, la liste des tables copiées,vérification…,reprise terminée : 59 tables, … lignes, … membre(s) — l'ancienne base est intacte., puis✓ données reprises …et enfin✓ Agora … répond : mise à jour confirmée. - L'adresse
/api/healthde ton Hub répond"ok": trueet"db": "ok". - Dans Administration → Membres, tu retrouves tous tes membres, avec le même nombre d'administrateurs qu'avant ; le forum, les candidatures et tes réglages sont là.
- Ta licence est active sans rien refaire : l'installation garde la même identité pour le serveur de licences, aucun siège n'est repris (voir Libérer un siège de licence seulement si le message « sièges pris » apparaît quand même).
Si ça ne marche pas #
Dans tous les cas ci-dessous, ton ancienne base n'a pas été modifiée, la nouvelle est vidée avant de recommencer, et la version d'avant reste (ou redevient) en service : la console dit mise à jour impossible : … puis la version … reste en place.
| Ce que tu vois | Cause | Que faire |
|---|---|---|
la base est encore PostgreSQL, mais cette version d'Agora tourne sur MariaDB et ton amorçage (boot.mjs) est trop ancien pour copier les données (fichier monté en lecture seule) | Docker : le fichier boot.mjs est monté en lecture seule, Agora ne peut pas le remplacer lui-même (ou il est protégé en écriture sur un panel) | Docker : relance la commande d'installation en root (étape 1 de la section « Docker avec install.sh »). Panel ou Node.js : télécharge boot.mjs et boot.mjs.sig (ou agora.mjs et agora.mjs.sig) depuis https://agorapanel.com/ dans le dossier du serveur, en remplaçant les anciens, puis redémarre. Relance ensuite la mise à jour |
mise à jour impossible : les migrations ont échoué juste après Agora 0.3.0-beta.1 installé, puis la version 0.2.0-beta.42 reste en place | Un amorçage très ancien (panel installé avant début octobre 2026) ne sait pas se remplacer lui-même (les versions MariaDB publiées après la 0.3.0-beta.1 le remplacent pour toi et te le disent) : il essaie les migrations MariaDB sur l'ancienne base PostgreSQL, qui les refuse. Rien n'a été modifié | Télécharge boot.mjs et boot.mjs.sig depuis https://agorapanel.com/ dans le dossier du serveur (ils remplacent les anciens), redémarre, puis relance la mise à jour |
cette version d'Agora tourne sur MariaDB : ton amorçage (boot.mjs) était trop ancien… il vient d'être mis à jour | Normal, une fois : Agora vient de remplacer lui-même l'amorçage | Redémarre le serveur, puis relance la mise à jour |
des valeurs sont différentes dans l'ancienne base mais IDENTIQUES pour MariaDB, qui ignore la casse, les accents et les espaces de fin : User(email) : 1 groupe(s) en double, par exemple « D***@exemple.test / d***@exemple.test » (ou une clé unique est en double dans la nouvelle base) | Deux lignes de l'ancienne base ne diffèrent que par une majuscule, un accent ou un espace de fin (par exemple deux membres avec le même courriel à la casse près). PostgreSQL les voit différentes, MariaDB non : la copie serait refusée | Rien n'a été copié. Corrige l'ancienne base pour que chaque valeur n'existe qu'une fois, puis relance la mise à jour. Le message donne la table et la colonne et masque les valeurs : voir « Retrouver les valeurs en double » plus bas. Change ensuite l'une des deux valeurs (un pseudo ou un courriel, depuis Administration → Membres) ou supprime le doublon inutile |
l'ancienne base PostgreSQL ne répond pas (…) : vérifie qu'elle tourne et que l'adresse AGORA_CONVERT_FROM est la bonne | L'ancienne base ne tourne pas, ou l'adresse ou le mot de passe de AGORA_CONVERT_FROM est faux | Docker : cd /opt/agora && docker compose up -d (et --profile legacy avec un compose à la main), puis vérifie l'adresse dans .env. Base externe : vérifie l'adresse et que la machine d'Agora peut la joindre |
la copie de la table … a échoué | Une écriture dans MariaDB a échoué (place disque, mémoire) | Libère de la place (anciennes sauvegardes) ou agrandis le disque, puis relance la mise à jour |
la vérification a échoué : … | La copie n'est pas identique à l'original (nombre de lignes, empreinte d'une ligne) | Ne force rien : ouvre un billet avec ces lignes (voir Ouvrir un billet de support). L'ancienne base reste ta référence |
Un .sql d'avant est refusé à la restauration | C'est une sauvegarde PostgreSQL, que MariaDB ne lit pas | Normal : voir Sauvegardes et restauration |
| Le serveur a été coupé (Stop, Kill, coupure de courant) pendant la copie | La copie était à moitié faite | Rien à faire : au démarrage suivant, Agora reconnaît la copie interrompue et la refait depuis le début |
Pour aller plus loin #
Retrouver les valeurs en double #
Le message de refus nomme la table et la colonne (par exemple User(email)) et ne montre que le début des valeurs. Pour retrouver la paire dans l'ancienne base (remplace User et email par ce que dit le message) :
docker exec agora-db psql -U agora -d agora -c 'SELECT lower(email), count(*) FROM "User" GROUP BY 1 HAVING count(*) > 1;'Sans Docker, la même requête se lance dans ton PostgreSQL. Corrige une des deux valeurs, puis relance la mise à jour : tant que ce n'est pas fait, rien n'est copié.
Ce qui se passe pendant la conversion #
- Agora vérifie d'abord, avant de copier quoi que ce soit, qu'aucune valeur n'en cache une autre pour MariaDB (les doublons de casse, d'accents ou d'espaces de fin décrits plus haut).
- Il ouvre l'ancienne base en lecture seule et la fige à un instant donné : même si quelqu'un écrivait encore, il copie un état cohérent.
- Il copie les tables dans le bon ordre (les liens entre tables sont respectés).
- Il vérifie la copie : nombre de lignes de chaque table, empreinte de chaque ligne, absence de ligne orpheline, nombre de membres identique. Il reporte aussi l'identité de la base (
db_instance_id), ce qui garde l'empreinte de licence. - Il pose une marque dans la nouvelle base pour ne jamais refaire la conversion au démarrage suivant, puis lance Agora.
Si une étape échoue, Agora vide la nouvelle base, remet la version d'avant sur l'ancienne base et le dit ; l'ancienne base n'a jamais été écrite.
Combien de temps ça prend #
Mesuré sur le banc : quelques secondes pour une installation de taille ordinaire (59 tables, quelques centaines de lignes). La durée suit le nombre de messages et de lignes ; nous n'avons pas mesuré un très gros forum, compte donc plus longtemps et laisse la console ouverte. Le site est indisponible pendant la mise à jour. Ne coupe pas le serveur : si tu le fais, la copie repart de zéro, sans rien perdre.
Revenir en arrière #
- Pendant la mise à jour : c'est automatique. Si la copie échoue, ou si la nouvelle version ne démarre pas, Agora remet tout seul la version d'avant sur son ancienne base (message
repli vers … : la version … n'a pas démarré). Les écritures faites avant la mise à jour y sont intactes, et si tu relances ensuite la mise à jour, la copie est refaite à neuf. - Une fois la nouvelle version confirmée (
mise à jour confirmée), il n'y a plus de retour automatique : ce que tu écris ensuite n'existe que dans MariaDB, il n'est pas recopié dans l'ancienne base. Si tu dois vraiment revenir, ouvre un billet (Ouvrir un billet de support) : l'ancienne base et ton ancien.envsont gardés pour ça.
Ce qui est gardé, et jusqu'à quand #
Agora n'efface jamais l'ancienne base tout seul : elle reste jusqu'à ce que tu la supprimes.
- Docker avec
install.sh: le conteneuragora-dbet son volumeagora_db(l'ancienne base), et le fichier/opt/agora/.env.avant-mariadb(ton ancien.env, avec l'ancien mot de passe : lisible par root seulement). - Docker avec un compose à la main : le volume
db_data, et les lignesPOSTGRES_PASSWORDetAGORA_CONVERT_FROMde ton.env. - Panel ou Node.js : le dossier
.agora/pg(l'ancienne base) et.agora/pg-portable(le programme PostgreSQL). Ne supprime pas.agora/pg-converted.json: c'est la marque « déjà converti ». - Les sauvegardes d'avant mise à jour (
pre-update-…) : Agora garde les cinq dernières.
Quand supprimer l'ancienne base #
Quand tu as vécu quelques jours sur MariaDB sans souci et fait une sauvegarde Agora de la nouvelle base (Administration → Agora → Sauvegardes, téléchargée hors du serveur). Alors :
- Docker avec
install.sh: retire de/opt/agora/.envles lignesAGORA_CONVERT_FROMetPOSTGRES_PASSWORD, relance la commande d'installation (elle réécrit le compose sans l'ancienne base), puiscd /opt/agora && docker compose up -d --remove-orphans. Quand tu es sûr, supprime le volume :docker volume lsdonne son nom complet (il finit paragora_db), puisdocker volume rm <nom>. Supprime aussi.env.avant-mariadb. - Docker avec un compose à la main :
docker compose --profile legacy down, retire de.envles lignesAGORA_CONVERT_FROMetPOSTGRES_PASSWORD, puis supprime le volumedb_data(docker volume lste donne son nom complet). - Panel ou Node.js : supprime les dossiers
.agora/pget.agora/pg-portablepour libérer la place.
Ce qui change pour toi après la conversion #
- La recherche du forum trouve des mots entiers ou des débuts de mot (« concess » trouve « concession »), sans tenir compte des accents ni des majuscules. Elle ne ramène plus les mots à leur racine : « voitures » ne trouve pas « voiture » si tu tapes le pluriel entier.
- Les pseudos se comparent sans accents ni majuscules : « Élise » et « Elise » sont le même nom. Ça évite les pseudos sosies.
- Les sauvegardes d'Agora se font sans programme externe et sont d'un autre format : tes anciens
.sqlPostgreSQL ne se restaurent plus. Voir Sauvegardes et restauration. - La licence ne bouge pas : même identité, même siège.
- Rien d'autre : le Hub, le MDT, la carte live, la concession et le reste fonctionnent comme avant. La base de ton serveur de jeu n'est jamais touchée par cette conversion.
Cet article t'a aidé ?
Articles liés
- Les deux bases d'Agora : celle du Hub et celle du jeuTon installation utilise deux bases : celle du Hub (MariaDB, gérée par Agora) et celle de ton serveur de jeu (MySQL ou MariaDB, que tu as déjà).
- Sauvegardes et restaurationSauvegarder la base d'Agora depuis l'administration, la télécharger hors du serveur et la restaurer. La copie de fichiers d'un panel n'est pas une sauvegarde.
- Dépanner la base intégrée du HubMémoire trop petite, disque plein, « la base intégrée n'a pas démarré » : les messages de la console quand la base du Hub pose problème, et le correctif.
- Mettre à jour Agora en un clic (et le canal bêta)Administration → Agora sauvegarde la base, télécharge et vérifie la nouvelle version, migre, redémarre, et revient en arrière tout seul si elle ne démarre pas.
- Mise à jour échouée et retour en arrièreUne mise à jour qui échoue ne touche à rien, ou revient seule à la version précédente ; pour annuler aussi la base, restaure la sauvegarde pre-update.
- Installer avec Docker (install.sh)Une seule commande installe Agora et sa base MariaDB sur une machine Linux avec Docker : tu n'as aucune base à préparer.
- Les variables d'environnementOù et comment modifier les réglages de démarrage d'Agora selon ta voie d'installation (Docker, panel, serveur Node.js), et la liste de ceux qui comptent.
- Déménager Agora sur une autre machineSauvegarder la base, copier les fichiers et le secret de session, réinstaller sur la nouvelle machine (Docker, panel ou Node.js), restaurer, reprendre le siège.
- Libérer un siège de licenceUne clé correspond à une installation ; après une réinstallation ou un déménagement, l'ancienne installation garde le siège jusqu'à ce que tu le libères.