tutoriaux:restaurer_depuis_les_fichiers_postgresql

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
tutoriaux:restaurer_depuis_les_fichiers_postgresql [2020/05/28 19:44] – créée max_bxltutoriaux:restaurer_depuis_les_fichiers_postgresql [2020/05/29 12:06] (Version actuelle) dany
Ligne 1: Ligne 1:
-L'ordinateur a planté, et l'on n'a pas pu/ne peut plus faire de sauvegarde depuis l'interface noalyss.+====== Situation ====== 
 + 
 +L'ordinateur a planté, et l'on n'a pas pu/ne peut plus faire de sauvegarde depuis l'interface noalyss.  
 + 
 +Parce que : 
 +  
 +  * un upgrade Linux n'a pas mis à jour la base de postgresql mais à créer une nouvelle version,  
 +  * simplement vous avez un backup de votre disque mais pas de backup de la DB
  
 Néanmoins, on a encore accès aux données sur le disque dur de l'ordinateur qui a planté (et donc à notre base de donnée postgresql). Néanmoins, on a encore accès aux données sur le disque dur de l'ordinateur qui a planté (et donc à notre base de donnée postgresql).
 +
 +
  
 On prendra un exemple où l'on doit restaurer une base de données construite avec postgresql-9.6 et remise dans une installation à jour avec postgresql-12. On prendra un exemple où l'on doit restaurer une base de données construite avec postgresql-9.6 et remise dans une installation à jour avec postgresql-12.
  
-Étape 0 : sauvegarder la base de données+On utilisera la version 9.6 et 12 , adaptez aux versions que vous avez 
 + 
 +====== Préambule : sauvegarder la base de données ====== 
 Copier/coller l'intégralité du dossier /var/lib/version/main/ (où "version" sera un numéro de version, dans notre exemple /var/lib/postgresql/9.6/main/ ) de l'ordinateur planté sur un support de sauvegarde (disque-dur/clé USB). Copier/coller l'intégralité du dossier /var/lib/version/main/ (où "version" sera un numéro de version, dans notre exemple /var/lib/postgresql/9.6/main/ ) de l'ordinateur planté sur un support de sauvegarde (disque-dur/clé USB).
  
 À partir de maintenant, on travaillera sur la nouvelle installation (dans l'exemple, postgresql-12).  À partir de maintenant, on travaillera sur la nouvelle installation (dans l'exemple, postgresql-12). 
  
-Étape 1 : installer l'ancienne version de postgresql+====== Installer l'ancienne version de postgresql====== 
 + 
  
 Soit en la compilant, soit avec les packages de la distribution. Soit en la compilant, soit avec les packages de la distribution.
Ligne 16: Ligne 30:
 Dans notre exemple, postgresql-9.6, à partir des conseils que l'on trouvera : [[https://askubuntu.com/questions/1052079/unable-to-install-postgresql-9-6-in-ubuntu-18-04|ici]]. Dans notre exemple, postgresql-9.6, à partir des conseils que l'on trouvera : [[https://askubuntu.com/questions/1052079/unable-to-install-postgresql-9-6-in-ubuntu-18-04|ici]].
  
-Étape 2 : démarrer l'ancienne version de postgresql en prenant en compte les données "historique"+====== Démarrer l'ancienne version de postgresql en prenant en compte les données "historique" ====== 
 + 
  
-Copier/coller (nécessite les droits admin) le dossier /var/lib/postgresql/9.6/main que l'on a sauvegardé dans le même dossier sur la nouvelle installation. Si le dossier n'existe pas, c'est que l'installation de postgresql ne s'est pas bien faite. 
  
-Modifier /etc/postgresql/9.6/main/pg_hba.conf de sorte que :+Copier/coller (nécessite les droits admin) le dossier /var/lib/postgresql/9.6/main (=POSTGRESBASE) que l'on a sauvegardé dans le même dossier sur la nouvelle installationSi le dossier n'existe pas, c'est que l'installation de postgresql ne s'est pas bien faite.
  
-local   all             all                                     peer +:IMPORTANT: On peut choisir un autre dossierEn choisissant d'écraser l'installation de postgresql , vous détruisez les données qui y seraient
-host    all             all             127.0.0.1/32            trust+
  
-Modifier /etc/postgresql/9.6/main/postgresql.conf de sorte que :  
  
 +Modifiez /etc/postgresql/9.6/main/pg_hba.conf ou créez le fichier dans POSTGRESBASE de sorte que :
 +<file txt pg_hba.conf>
 +
 +local   all             all                                     peer
 +host    all             all             127.0.0.1/32            trust
 +</file>
 +Modifiez /etc/postgresql/9.6/main/postgresql.conf ou créez le fichier dans POSTGRESBASE de sorte que : 
 +<file txt postgresql.conf>
 listen_addresses = 'localhost'          # what IP address(es) to listen on; listen_addresses = 'localhost'          # what IP address(es) to listen on;
 port = 4000                             # (change requires restart) port = 4000                             # (change requires restart)
- +</file> 
-Copier/coller (nécessite les droits admin) /etc/postgresql/9.6/main/pg_hba.conf et /etc/postgresql/9.6/main/postgresql.conf dans /var/lib/postgresql/9.6/main +Copier/coller (nécessite les droits admin) /etc/postgresql/9.6/main/pg_hba.conf et /etc/postgresql/9.6/main/postgresql.conf dans POSTGRESBASE
  
 Vérifier que tout appartient et est fait par l'utilisateur postgres  Vérifier que tout appartient et est fait par l'utilisateur postgres 
 +<code bash>
 +POSTGRESBASE=/var/lib/postgresql/9.6/main
 +chown -R postgres $POSTGRESBASE # /var/lib/postgresql/9.6/main
 +chmod -R o-rwx    $POSTGRESBASE #/var/lib/postgresql/9.6/main
 +</code>
  
-chown -R postgres /var/lib/postgresql/9.6/main 
-chmod -R o-rwx /var/lib/postgresql/9.6/main 
  
-Puis faire (attention, il faut avoir le chemin complet vers pg_ctl)+Puis faire :
  
 +(attention, il faut avoir le chemin complet vers pg_ctl)
 +
 +(attention, à partir de postgresql-12, il faut également faire l'étape "Complément (version >=12)" décrite plus loin, juste avant les lignes suivantes)
 +(!) Rappel /var/lib/9.6/main est POSTGRESBASE
 +<code>
 /usr/lib/postgresql/9.6/bin/pg_ctl start --pgdata  /var/lib/9.6/main/  -o "--port=4000" /usr/lib/postgresql/9.6/bin/pg_ctl start --pgdata  /var/lib/9.6/main/  -o "--port=4000"
 +</code>
 +Une fois cela fait, avec la nouvelle version de postgresl (pour rappel, c'est la 12 pour cet exemple), en indiquant le port de la 9.6 faire :
 +<code>
 +/usr/lib/postgresql/12/bin/pg_dumpall --port=4000 > full-backup.dmp
 +</code>
 +Il faut se connecter sur le port de la version 9.6 , puis arrêter ce server
 +<code>
 +/usr/lib/postgresql/9.6/bin/pg_ctl stop --pgdata  /var/lib/9.6/main/  -o "--port=4000"
 +</code>
  
-Une fois cela fait, avec la nouvelle version de postgresl (pour rappel, c'est la 12 pour cet exemple) faire :+====== Restaurer la base de donnée ======
  
-/usr/lib/postgresql/12/bin/pg_dumpall > full-backup.dmp 
  
-Puis arrêter le server 9.6 +Restaurez votre backup ,  
-/usr/lib/postgresql/9.6/bin/pg_ctl stop --pgdata  /var/lib/9.6/main/  -o "--port=4000"+<code bash> 
 +sudo --u postgres 
 +psql <  noalyss_backup.dmp 
 +</code> 
 +Les données , les utilisateurs et les mots de passe seront comme à l'origine . 
 + 
 + 
 +source : [[tutoriaux:sauvegarde_et_restauration_des_bases_de_donnees#procedure_de_restauration|tutoriaux:Procédure de restauration]] 
 + 
 +====== Complément (version >= 12) ====== 
 + 
 +:TO-READ: Cette étape est absolument optionnelle et ne fera qu'éviter des warnings, vous pouvez l'ignorer. 
 + 
 +À partir de la version 12 , on ne peut plus utiliser "with oids" qui était le défaut jusque là  
 + 
 +Il va falloir faire un script pour les modifier, quand la 9.6 tourne, se connecter et faire **pour chaque base de données**, en tant que postgres : 
 + 
 +<code sql> 
 +postgres@dany:~$ psql db1 
 +postgres=#\o /tmp/x.sql 
 + 
 +postgres=# select 'alter table '||nsp.nspname  ||'.'|| tbl.relname ||'set without oids;' 
 +from pg_namespace nsp 
 +  join pg_class tbl on nsp.oid tbl.relnamespace 
 +where tbl.relhasoids='t' and nsp.nspname <> 'pg_catalog';
  
 +postgres=#\o
 +postgres=#\i /tmp/x.sql
 +</code>
  
 +où db1 est le nom de la base de donnée numéro un, que l'on trouvera de la manière suivante :
  
 +<code>
 +postgres@dany:~$ psql
 +postgres=#\l
 +</code>
  
  • tutoriaux/restaurer_depuis_les_fichiers_postgresql.1590687871.txt.gz
  • Dernière modification : 2020/05/28 19:44
  • de max_bxl