Changes

m
no edit summary
Line 1: Line 1:  +
<!-- BEGIN interlang links -->
 +
<!-- Do NOT edit this section
 +
    Links below are automatically managed by PolyglotBot
 +
    You can edit links on the English source page : FAQ_Migrate_my_Mysql_database_to_PostgreSQL -->
 +
[[en:FAQ_Migrate_my_Mysql_database_to_PostgreSQL]]
 +
[[es:FAQ_Migrar_mi_base_de_datos_MySQL_hacia_PostgreSQL]]
 +
<!-- END interlang links -->
 +
 
[[Category:FAQ FR]]
 
[[Category:FAQ FR]]
 
= Prérequis=
 
= Prérequis=
Votre version de Dolibarr doit être au minimum la version 3.1.1.
+
Votre version de Dolibarr doit être au minimum la version 3.2.0.
 
Si ce n'est pas le cas, procéder d'abord à une mise à jour de votre Dolibarr sous MySql.
 
Si ce n'est pas le cas, procéder d'abord à une mise à jour de votre Dolibarr sous MySql.
   −
=Procédure=
     −
=== Export Mysql ===
+
=Procédure 1=
* Aller sur la page '''Configuration - Outils - Sauvegarde'''.
  −
* Choisir la méthode d'export "'''MySql dump'''".
  −
* Choisir compatibilité d'export "'''POSTGRESQL'''".
  −
* Choisir "'''Compression Aucune'''" et cliquer sur "'''Générer sauvegarde'''".
     −
* Aller dans le répertoire de vos données Dolibarr (le répertoire est indiqué dans "'''Configuration - Informations systèmes - Dolibarr - Tous les paramètres'''" sur la ligne "'''Répertoire racine des fichiers de données'''").
+
=== Installer le module MigToPG ===
* Aller dans le sous répertoire '''admin/backup'''. Vous y trouverez le dump de sauvegarde de la base qui viens d'être généré. Nous appellerons ce fichier mysqldump_mydatabase_version_date.sql dans la suite de ce tutorial. Conserver ce fichier, il sera utilisé plus loin.  
+
Ce module est disponible gratuitement sur Dolistore.
 +
Il permet de migrer de MySQL vers PgSQL avec les contrôles d'intégrité et vérification des problèmes potentiel.
 +
Normalement le fichier de configuration est modifié automatiquement mais si ce n'est pas le cas, voir le paragraphe ci dessous.
   −
=== Création base de donné sous PostGreSQL ===
+
=== Modifier le fichier de configuration Dolibarr ===
* Créer une base PostGreSQL vierge au nom de votre choix. Cette procédure ne détaille pas cette phase, se reporter à la documentation PostGreSQL pour cela.
  −
 
  −
=== Import sauvegarde ===
  −
* Modifier le fichier généré dans la phase export afin de mettre les bons échappements sur les chaines:
  −
<source lang="bash">
  −
sed "s/\\\'/\'\'/g" mysqldump_mydatabase_version_date.sql > mysqldump_readyforpgsql.sql
  −
</source>
  −
* Après avoir convertit le fichier, importer le sur votre base postgresql vierge:
  −
<source lang="bash">
  −
psql -h nom_ou_ip_du_serveur_postgresql -d nom_base_postgresql-U login_base_mysql -f mysqldump_readyforpgsql.sql
  −
</source>
  −
 
  −
=== Modification de votre fichier de configuration Dolibarr ===
   
* Ouvrer avec un éditeur de texte le fichier '''htdocs/conf/conf.php''' qui se trouve dans la racine de votre installation de Dolibarr.
 
* Ouvrer avec un éditeur de texte le fichier '''htdocs/conf/conf.php''' qui se trouve dans la racine de votre installation de Dolibarr.
 
* Modifier les lignes pour faire pointer les programmes sur la nouvelle base de donnée
 
* Modifier les lignes pour faire pointer les programmes sur la nouvelle base de donnée
<source lang="ini">
+
<syntaxHighlight lang="ini">
 
$dolibarr_main_db_host='nom_ou_ip_du_serveur_postgresql';
 
$dolibarr_main_db_host='nom_ou_ip_du_serveur_postgresql';
 
$dolibarr_main_db_port='port_serveur_postgresql';
 
$dolibarr_main_db_port='port_serveur_postgresql';
 
$dolibarr_main_db_name='nom_base_postgresql';
 
$dolibarr_main_db_name='nom_base_postgresql';
$dolibarr_main_db_user='login_base_mysql';
+
$dolibarr_main_db_user='login_base_postgresql';
$dolibarr_main_db_pass='mot_de_passe_base_mysql';
+
$dolibarr_main_db_pass='mot_de_passe_base_postgresql';
 
$dolibarr_main_db_type='pgsql';
 
$dolibarr_main_db_type='pgsql';
</source>
+
</syntaxHighlight>
   −
===Tester l'application===
+
=== Tester l'application===
 
Vous devez retrouver une application 100% fonctionnelle et avec toutes ses données.
 
Vous devez retrouver une application 100% fonctionnelle et avec toutes ses données.
 
La base de donnée MySql peut être arrêtée.
 
La base de donnée MySql peut être arrêtée.
 +
 +
 +
=Procédure 2=
 +
 +
=== Exporter la base Mysql ===
 +
* Aller sur la page '''Configuration - Outils - Sauvegarde'''.
 +
* Choisir la méthode d'export "'''MySql dump'''".
 +
* Choisir compatibilité d'export "'''POSTGRESQL'''".
 +
* Décocher "'''Structure'''".
 +
* Cocher "'''Nommer les colonnes'''".
 +
* Décocher "'''Utiliser les INSERT étendus'''".
 +
* Choisir "'''Pas d'instruction LOCK autour des INSERT'''".
 +
* Dans la zone "'''Compression'''", mettre "'''Aucune'''"
 +
* Puis cliquer sur "'''Générer sauvegarde'''".
 +
* Aller dans le répertoire de vos données Dolibarr (le répertoire est indiqué dans "'''Configuration - Info systèmes - Dolibarr - Tous les paramètres'''" sur la ligne "'''Répertoire racine des fichiers de données'''"). Aller dans le sous répertoire '''admin/backup'''. Vous y trouverez le dump de sauvegarde de la base qui viens d'être généré. Nous appellerons ce fichier mysqldump_mydatabase_version_date.sql dans la suite de ce tutorial. Copier ce fichier dans le répertoire /tmp.
 +
 +
=== Créer la base de donnée sous PostGreSQL ===
 +
* Renommer le fichier '''conf.php''' de Dolibarr en '''conf.php.mysql''' (il doit etre soit dans '''/etc/dolibarr''' soit dans '''htdocs/conf''')
 +
* Créer un fichier '''conf.php''' vide pour remplacer celui qui a été renommé en lui donnant les droits en lecture et écriture pour tout le monde.
 +
* Lancer Dolibarr. Le fichier de conf n'existant plus, la procédure d'installation doit être proposée au lieu de la logon. Choisissez première installation et saisissez les informations de postgresql comme base de données source. Dérouler la procédure jusqu'au bout. Pour le compte administrateur, choisir le même que celui qui existait sous Mysql.
 +
* Se connecter. On arrive sur une instance opérationnelle mais sans donnée.
 +
* Activer tous les modules qui était actif dans l'ancienne base (une activation suffit, leur configuration n'est pas requise, car tout ce que nous voulons, c'est obtenir la même structure de base que l'ancienne base de donnée).
 +
* Si vous aviez ajouter des "champs complémentaires" pour certains éléments, vous devez aussi les définir dans cette nouvelle instance (la encore, le but est d'avoir les mêmes champs que dans l'ancienne instance de base).
 +
* On va charger les anciennes données à l'étape suivante.
 +
Rem: En cas de problème, pour revenir sur un Dolibarr qui pointe sur l'ancienne base Mysql, restaurer simplement le fichier conf renommé avec son nom d'origine en '''conf.php'''.
 +
 +
=== Importer la sauvegarde MySql ===
 +
* Modifier la configuration de postgresql afin d'accepter temporairement la syntaxe du fichier issu du dump mysql en plaçant la directive escape_string_warning à off dans le fichier '''postgresql.conf'''
 +
<syntaxHighlight lang="ini">
 +
escape_string_warning = off
 +
</syntaxHighlight>
 +
Redémarrer le serveur.
 +
* Désactiver les contraintes pour permettre l'import. Pour cela, se connecter à la base et exécuter la procédure stockée dol_util_triggerall qui a été installé avec Dolibarr avec la paramètre à off:
 +
<syntaxHighlight lang="sql">
 +
psql -h name_or_ip_of_postgresql_server -d name_database_postgresql -U login_database_mysql
 +
> select dol_util_triggerall(false);
 +
CTRL+D
 +
</syntaxHighlight>
 +
* Modifier le fichier généré dans la phase export afin de mettre les bons échappements sur les chaines:
 +
<syntaxHighlight lang="bash">
 +
cd /tmp
 +
sed -e "s/\\\'/\'\'/g" mysqldump_mydatabase_version_date.sql > mysqldump_readyforpgsql.sql
 +
</syntaxHighlight>
 +
* Après avoir convertit le fichier, importer le sur votre base postgresql vierge:
 +
<syntaxHighlight lang="bash">
 +
psql -h nom_ou_ip_du_serveur_postgresql -d nom_base_postgresql -U login_base_mysql -f mysqldump_readyforpgsql.sql >resimport.sql 2>&1
 +
</syntaxHighlight>
 +
Jeter un oeil au fichier sortie resimport.log. Si la structure de la base Postgresql correspond bien à la structure de la base Mysql (pas de table ni de champs en moins), vous ne devriez pas avoir d'erreur.
 +
Si vous en avez, reportez le sur le forum dolibarr.
 +
Noter que vous pouvez réexécuter cette commande d'import après des corrections manuelles de la structure de la base d'accueil. C'est sans risque car toutes les tables Dolibarr sont protégées par une contraintes "clé unique". Aussi si vous réalisez cela, vous aurez juste des erreurs de type "clé dupliquée", que vous pouvez ignorer. Ne faites attention qu'aux autres erreurs.
 +
* Une fois l'import terminé, il est nécessaire de réactiver les contraintes et mettre à jour les séquences pour correspondre aux nouvelles valeures
 +
<syntaxHighlight lang="sql">
 +
psql -h name_or_ip_of_postgresql_server -d name_database_postgresql -U login_database_mysql
 +
> select dol_util_triggerall(true);
 +
> select dol_util_rebuild_sequences();
 +
CTRL+D
 +
</syntaxHighlight>
 +
Vous pouvez aussi restaurer le fichier postgresql.conf à sa valeur initiale.
 +
<syntaxHighlight lang="ini">
 +
escape_string_warning = on
 +
</syntaxHighlight>