Vous n'êtes pas identifié(e).

#1 29/11/2012 10:42:29

Yo
Membre

Cohérence des backups

Bonjour,
je débute sous Postgres et je me pose des questions sur le backup de bases de prod.
J'ai noté que Postgres propose 2 utilitaires pour réaliser des sauvegardes : pg_dump et pg_dumpall
Existe-t-il un moyen de réaliser avec ces outils des backups cohérents sans interrompre les alimentations ?
Merci.

Hors ligne

#2 29/11/2012 10:46:35

arthurr
Membre

Re : Cohérence des backups

Bonjour,

Cohérence : oui sans problème pour les deux.
pg_dump => backup d'une base d'un cluster
pg_dumpall => backup de toutes les bases d'un cluster

Hors ligne

#3 29/11/2012 12:10:01

Yo
Membre

Re : Cohérence des backups

Que font ces utilitaires pour assurer cette cohérence, notamment lors de backup de gros volumes.
Je m'explique par exemple avec 2 tables de données, T1 table de métadonnées, T2 table de données, très volumineuse et qui possède une contrainte étrangère sur T1.
Je lance pg_dump, qui commence par sauvegarder T2.
Presque en fin de backup de T2, une ligne de T1 référencée par des données de T2 est supprimée.
Que se passe-t-il au niveau du fichier résultat et de la cohérence des données ?
Postgres assure-t-il la cohérence en bloquant temporairement  les transactions ?

Merci

Hors ligne

#4 29/11/2012 13:21:21

gleu
Administrateur

Re : Cohérence des backups

PostgreSQL utilise MVCC, comme de nombreux autres SGBD. L'implémentation est un peu différente de celles des autres SGBD mais cela ne change pas le but de MVCC, à savoir permette aux écrivains et aux lecteurs de travailler en même temps, sans se gêner. En fait, PostgreSQL peut avoir deux versions simultanées de la même ligne, ce qui fait que la transaction qui a fait une modification voit la ligne modifiée alors que les autres voient l'ancienne ligne tant que la transaction n'a pas été commitée.

Donc pour résumer :
* pg_dump et pg_dumpall font des sauvegardes cohérentes à chaud ;
* sans bloquer les utilisateurs ;
* sauf si ces derniers cherchent à supprimer les tables (DROP TABLE) ou à les redéfinir (style ALTER TABLE pour ajouter une colonne).

Si la sauvegarde dure 5 heures, le fichier résultant contiendra le contenu de la base 5h avant.


Guillaume.

Hors ligne

#5 29/11/2012 14:11:53

Yo
Membre

Re : Cohérence des backups

Juste pour enfoncer le clou.
Donc  pg_dump se base en gros sur un numéro de transaction en début d'exécution et s'y tient pour la lecture et donc la sauvegarde des lignes.
Ceci implique qu' il vaut mieux utiliser ces outils plutôt qu'une succession de select basiques redirigés dans un fichier texte (ou programme maison) qui ne tiendraient pas compte de cette information cruciale.
Merci Guillaume.

Hors ligne

#6 29/11/2012 15:42:13

Marc Cousin
Membre

Re : Cohérence des backups

Plus précisément, pg_dump déclenche un snapshot de la base, tout simplement en commençant son travail par un ordre «begin transaction isolation level repeatable read» (je crois que c'était serializable qu'il utilisait dans les versions précédentes». On a donc des données cohérentes sur l'ensemble du dump. On peut même pousser le vice dans les versions récentes (9.1 et +) à lui passer l'option «--serializable-deferrable», afin qu'il réalise le dump en «serializable», ce qui permet d'avoir non seulement un export cohérent au sens auquel vous l'entendez, mais aussi avec la notion de transactions sérialisables. http://wiki.postgresql.org/wiki/SSI/fr


Marc.

Hors ligne

#7 29/11/2012 15:44:06

gleu
Administrateur

Re : Cohérence des backups

En gros, oui, il vaut mieux utiliser pg_dump.

Mais ce que fait pg_dump est facilement imitable. Il suffit d'ouvrir une transaction en mode "repeatable read", de placer un verrou sur chaque table (style access share), et re faire des COPY TO. Ceci que pour les données. Reste évidemment ensuite les déclarations d'objets. Donc faisable, mais pas simple. Beaucoup plus facile (et sûr) de passer par pg_dump smile


Guillaume.

Hors ligne

#8 29/11/2012 16:17:59

Yo
Membre

Re : Cohérence des backups

Super clair.
Merci à tous, je cours faire des backups !

Hors ligne

Pied de page des forums