Gitea Migration MySQL vers PostgreSql : Différence entre versions
(Page créée avec « Cet article présente la migration d'une instance <code>Gitea</code> depuis <code>MySql</code> vers <code>Postgresql</code>. == link= Votre avis =... ») |
m |
||
Ligne 115 : | Ligne 115 : | ||
== [[File:Viewer icon.png|link=]] Voir aussi == | == [[File:Viewer icon.png|link=]] Voir aussi == | ||
{{Modèle:OfficialManual|https://docs.gitea.io/en-us/command-line/#dump}} | {{Modèle:OfficialManual|https://docs.gitea.io/en-us/command-line/#dump}} | ||
− | |||
https://discourse.gitea.io/t/migrate-gitea-db-from-mariadb-to-postgresql/2072/3 | https://discourse.gitea.io/t/migrate-gitea-db-from-mariadb-to-postgresql/2072/3 | ||
[[Category:Gitea Installation]] [[Category:MySql]] [[Category:PostgreSql]] | [[Category:Gitea Installation]] [[Category:MySql]] [[Category:PostgreSql]] |
Version actuelle en date du 23 décembre 2020 à 17:52
Cet article présente la migration d'une instance Gitea
depuis MySql
vers Postgresql
.
Sommaire
Votre avis
Nobody voted on this yet
|
|
Initialisation base PostgreSql
Afin de migrer les données depuis une instance MySql
, l'outil de dump des données est utilisé. Celui-ci va extraire les données mais également la déclaration des tables. Il n'est donc pas nécessaire de faire une installation à blanc avec la configuration PostgreSql
.
Il est juste nécessaire d'initialiser le compte et la base dans PostgreSql
, comme indiqué dans l'article configuration PostgreSql.
Création du role PostgreSQL
postgres=# CREATE USER "gitea" WITH PASSWORD 'GITEA_PASSWORD';
CREATE ROLE
Où GITEA_PASSWORD
est remplacé par le mot de passe souhaité.
Création de la base
postgres=# CREATE DATABASE gitea WITH OWNER gitea TEMPLATE template0 ENCODING UTF8 LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8';
CREATE DATABASE
Attention, il est nécessaire de spécifier le modèle template0
si il est souhaité de spécifier la local en_US.UTF-8
. Pour cette installation, si le template n'est pas spécifié, une erreur est retournée.
postgres=# CREATE DATABASE gitea WITH OWNER gitea ENCODING UTF8 LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8';
ERROR: new collation (en_US.UTF-8) is incompatible with the collation of the template database (fr_FR.UTF-8)
HINT: Use the same collation as in the template database, or use template0 as template.
Il faut ensuite installée une version vierge de Sonarquabe avec la même version que celle à migrer. Dans le cadre de cette article, c'est une version 7.8
. L'instance est mise en place dans le répertoire /var/opt/sonarqube/7.8.p
, et elle est configurée pour une base PostgreSql.
Le fichier de configuration de la version sous MySql
se trouve à l'emplacement /var/opt/sonarqube/7.8/conf/sonar.properties
, et à l'emplacement /var/opt/sonarqube/7.8.p/conf/sonar.properties
pour l'instance sous PostgreSql
.
Attention, une fois l'instance installée, il est recommandée de purger les données ElasticSearch
.
#sudo rm -rf /var/opt/sonarqube/7.8.p/data/es6
Backup complet
Gitea
dispose d'un outil permettant d'effectuer une sauvegarde complète de l'instance, incluant la base de données et les fichiers. Celui-ci est utilisé pour générer cette sauvegarde et en extraire le fichier avec les données extraites de la base. Pour mémoire, l'instance est installée, sous /var/opt/gitea
et démarrée avec le compte gitea
.
Initialisation
Un répertoire de travail est créé spécifiquement.
#sudo mkdir /tmp/giteamig #sudo chmod 777 /tmp/giteamig
Exécution
Puis la commande de backup est exécutée.
#sudo runuser -u gitea -- /var/opt/gitea/gitea dump -d postgres -c /var/opt/gitea/custom/conf/app.ini -f /tmp/giteamig/gitea-migration.zip
Extraction sauvegarde
Une fois la sauvegarde terminée, il faut décompresser le fichier pour avoir accès au fichier gitea-db.sql
contenant toutes les requêtes de création et injection de données.
#sudo unzip /tmp/giteamig/gitea-migration.zip -d /tmp/giteamig/
Chargement des données
Une fois le fichier gitea-db.sql
disponible, il faut le charger dans la base PostgreSql
.
#sudo psql --username gitea -h localhost --set ON_ERROR_STOP=on gitea < /tmp/gitea-db.sql
Bug de données
Dans le cadre de cette article, le chargement des données provoquaient une erreur. En effet la colonne keep_activity_private
, de la table user
, autorisait les valeurs nulles au niveau de MySql
, et la définition dans PostgreSql
demande à ce que les données ne le soient pas. Il a fallu mettre à jour les données source pour forcer une valeur.
mysql> UPDATE user SET keep_activity_private = 0 WHERE keep_activity_private IS NULL;
Configuration Gitea
Une fois les données chargées dans PostgreSql
, il faut modifier la configuration de Gitea
pour mentionner la nouvelle chaîne de connexion.
Il faut arrêter le servic.
#sudo systemctl stop gitea
Puis il faut modifier la configuration dans le fichier /var/opt/gitea/custom/conf/app.ini
.
[database]
#DB_TYPE = mysql
DB_TYPE = postgres
#HOST = 127.0.0.1:3306
HOST = 127.0.0.1:5432
NAME = gitea
USER = gitea
PASSWD = GITEA_PASSWORD
SCHEMA =
SSL_MODE = disable
CHARSET = utf8
A noter que dans cette configuration, la variable SCHEMA
est laissée à vide pour utiliser le schéma par défaut public
.
Et enfin redémarrer le service.
#sudo systemctl start gitea
Voir aussi
Documentation officielle: https://docs.gitea.io/en-us/command-line/#dump
https://discourse.gitea.io/t/migrate-gitea-db-from-mariadb-to-postgresql/2072/3