tutoriaux:restaurer_depuis_les_fichiers_postgresql

Ceci est une ancienne révision du document !


Situation

L'ordinateur a planté, et l'on n'a pas pu/ne peut plus faire de sauvegarde depuis l'interface noalyss.

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.

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

À partir de maintenant, on travaillera sur la nouvelle installation (dans l'exemple, postgresql-12).

Installer l'ancienne version de postgresql

Soit en la compilant, soit avec les packages de la distribution.

Dans notre exemple, postgresql-9.6, à partir des conseils que l'on trouvera : ici.

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 :

local   all             all                                     peer
host    all             all             127.0.0.1/32            trust

Modifier /etc/postgresql/9.6/main/postgresql.conf de sorte que :

listen_addresses = 'localhost'          # what IP address(es) to listen on;
port = 4000                             # (change requires restart)

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

Vérifier que tout appartient et est fait par l'utilisateur postgres

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)

(attention, à partir de postgresql-12, il faut également faire l'étape “Complément (version >=12)” décrite plus loin, juste avant les lignes suivantes)

/usr/lib/postgresql/9.6/bin/pg_ctl start --pgdata  /var/lib/9.6/main/  -o "--port=4000"

Une fois cela fait, avec la nouvelle version de postgresl (pour rappel, c'est la 12 pour cet exemple) faire :

/usr/lib/postgresql/12/bin/pg_dumpall > full-backup.dmp

Puis arrêter le server 9.6

/usr/lib/postgresql/9.6/bin/pg_ctl stop --pgdata  /var/lib/9.6/main/  -o "--port=4000"

Restaurer la base de donnée

Restaurez votre backup ,

sudo -i -u postgres
psql <  noalyss_backup.dmp

Les données , les utilisateurs et les mots de passe seront comme à l'origine .

source : tutoriaux:Procédure de restauration

Complément (version >= 12)

À 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 :

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

où db1 est le nom de la base de donnée numéro un, que l'on trouvera de la manière suivante :

postgres@dany:~$ psql
postgres=#\l
  • tutoriaux/restaurer_depuis_les_fichiers_postgresql.1590688890.txt.gz
  • Dernière modification : 2020/05/28 20:01
  • de max_bxl