L'exécution de pg_dump sur la base de données en direct produit-elle des sauvegardes cohérentes?

37

J'ai une base de données de 3 Go qui est constamment modifiée et j'ai besoin de faire des sauvegardes sans arrêter le serveur (Postgres 8.3).

Mon pg_dump s'exécute pendant 5 minutes. Que se passe-t-il si les données sont modifiées pendant le processus? Est-ce que je reçois des sauvegardes cohérentes? Je ne veux pas savoir quand une catastrophe se produit.

La documentation de Postgres http://www.postgresql.org/docs/8.3/static/app-pgdump.html ne dit rien à ce sujet.

romain
la source
4
Salut Roddick. Je recommande fortement de tester votre processus de restauration avant qu'un désastre ne se produise. Configurez une autre machine et effectuez une restauration à l'aide de l'une de vos sauvegardes pour la tester.
Derek Downey

Réponses:

53

Du manuel :

Les sauvegardes sont cohérentes même si la base de données est utilisée simultanément.

Alors oui, vous pouvez faire confiance à la sauvegarde. Bien sûr, c'est PostgreSQL, vous pouvez faire confiance à vos données dans PostgreSQL.

Frank Heikens
la source
10
J'ai littéralement LOLTED quand j'ai lu "vous pouvez faire confiance à vos données dans PostgreSQL" :)
François Beausoleil
Un lien vers le manuel serait bien
Pablo Fernandez le
1
@PabloFernandez: C'est fait!
Frank Heikens
1
Cependant, une sauvegarde logique sur une base de données active verrouillera vos tables. Ne manquez pas ces informations. Peut-être vous trouverez quelques conseils: compose.com/articles/...
tryp
Alors s'il vous plaît, qu'est-ce qui est si drôle à ce sujet? Devrais-je arrêter d'utiliser postgresql?
777Anon
12

pg_dump lance une transaction, de la même manière que toute autre requête de longue durée. La cohérence des garanties provient de l' implémentation de MVCC . Le vidage sera toujours cohérent dans ces règles.

Toutes les parties floues de MVCC sont liées à des éléments tels que les transactions de commande UPDATE devenues visibles pour les autres clients et la manière dont les verrous sont acquis. pg_dump est strict sur la commande et acquiert un verrou en lecture sur toute la base de données pour la vider. Pour la plupart des gens, c'est ce à quoi ils s'attendent et le mécanisme utilisé ne pose aucun problème. Le principal risque de simultanéité est que les clients essayant de modifier la structure de la base de données soient bloqués pendant l'exécution du dump. Cela n'a cependant pas d'incidence sur la qualité de la décharge.

Greg Smith
la source
11

Le vidage commence par le réglage TRANSACTION ISOLATION LEVEL SERIALIZABLE.

Veuillez lire le manuel sur l’ isolation de transaction et, par exemple, la discussion de la liste des utilisateurs à ce sujet .

Citation:

La sauvegarde ne verra que les transactions validées avant la définition du niveau d'isolement.

Fondamentalement, tout ce qui suit pg_dumpdéfinit le niveau d'isolation de transaction ne fait pas partie de ce vidage.

Les opérations de lecture / écriture ne sont pas affectées (verrouillées) pendant cette période.

Dennis Nolte
la source
-1

D'abord désolé d'avoir répondu sur ce vieux fil. Mais de par mon expérience, je ne peux pas confirmer l'affirmation selon laquelle vous pouvez faire confiance à pg_dump /

Il y a quelques mois, je suis passé d'un projet à Postgres. Et bien sûr, j'ai fait toutes les sauvegardes avec pg_dump à partir du système live, comme suggéré. Mais après la première vérification de sauvegarde, j'ai compris que toutes les images étaient de tailles différentes. Après avoir restauré au hasard certaines d’entre elles, j’ai compris que certaines tables manquaient. J'ai donc commencé à analyser pourquoi cela se produisait et j'ai compris que si l'application superposée, par exemple les serveurs d'applications, verrouille certaines tables et que pg_dump n'attend pas leur publication. J'avais à chaque fois besoin d'arrêter le serveur pendant la période de sauvegarde, ce qui n'est pas une bonne solution.

Je cherche donc toujours un correctif, mais comme je l'ai dit, je ne suis pas du tout d'accord avec l'affirmation selon laquelle vous pouvez faire confiance à pg_dump.

Pete Porter
la source
Si cela se produit, ce sera grave dans pg_dump. Quelle version utilisez-vous? Ma question était posée il y a 3 ans et je suis maintenant sur 9.3 et Amazon Reds, qui effectuent des sauvegardes réelles en utilisant apparemment pg_dump. Ils ne peuvent pas se tromper.
Roman
Vous pouvez faire confiance à pg_dump pour effectuer une sauvegarde sérialisée (voir ma réponse pour links / docs et quelques détails). . Comme nous ne faisons qu'insérer / mettre à jour / supprimer, je ne peux pas commenter les créations de tableaux. Pour nous, je me suis assuré de ne pas créer de tables pendant le temps pg_dump.
Dennis Nolte
2
Vos déclarations indiquent soit un bogue grave (avez-vous déposé un rapport de bogue?), Un bogue grave dans la façon dont vous videz votre base de données ou un malentendu. En l'absence de faits, on ne peut pas décider parmi ceux-ci.
dezso