PostgreSQL PITR backup: meilleures pratiques pour gérer plusieurs bases de données?

Hy les gars, j'ai un serveur postgresql 8.3 avec de nombreuses bases de données.

en fait, im envisage de sauvegarder ces db avec un script qui stockera toute la sauvegarde dans un dossier avec le même nom de la db, par exemple:

/mypath/backup/my_database1/
/mypath/backup/my_database2/
/mypath/backup/foo_database/

tous les jours je fais une décharge toutes les 2 heures, en écrasant les fichiers tous les jours... par exemple, dans le dossier my_database1, j'ai:

my_database1.backup-00.sql  //backup made everyday at the 00.00 AM
my_database1.backup-02.sql  //backup made everyday at the 02.00 AM
my_database1.backup-04.sql  //backup made everyday at the 04.00 AM
my_database1.backup-06.sql  //backup made everyday at the 06.00 AM
my_database1.backup-08.sql  //backup made everyday at the 08.00 AM
my_database1.backup-10.sql  //backup made everyday at the 10.00 AM
[...and so on...]

C'est comme ça que je m'assure de pouvoir restaurer everydatabase perdre au moins 2 heures de données.

2 heures semble encore trop.

j'ai un regard à la PostgreSQL pitrought les fichiers WAL, mais, ces fichiers semblent contenir tous les données sur tous ma base de données.

je vais devoir séparer ces fichiers, de la même manière que je sépare les fichiers dump.

Comment faire?

Sinon, il ya un autre facile à installer pour avoir une procédure de sauvegarde qui permet de restaurer seulement 1 sauvegarde à 10 secondes plus tôt, mais sans créer un fichier dump toutes les 10 Secondes?

1
demandé sur Strae 2009-07-15 14:18:39

3 réponses

Pourquoi voulez-vous séparer les bases de données?

la façon dont le PITR fonctionne, il n'est pas possible de le faire puisqu'il fonctionne sur le cluster complet. Ce que vous pouvez faire dans ce cas est de créer un répertoire de données et un cluster séparé pour chacune de ces bases de données (ce qui n'est pas recommandé, car cela nécessitera des ports différents, et des instances postmaster).

je crois que les avantages de L'utilisation de PITR au lieu de dumps réguliers l'emportent sur les avantages d'avoir séparé sauvegardes pour chaque base de données, donc peut-être que vous pouvez repenser les raisons pour lesquelles vous avez besoin de le séparer.

une autre façon pourrait être de configurer une réplication avec Slony-i mais cela nécessiterait une machine (ou instance) séparée qui reçoit les données. D'autre part, de cette façon vous aurait répliqué système en temps quasi-réel.

mise à jour pour commentaire:

à récupérer de erreurs, comme supprimer une table, PITR serait parfait puisque vous pouvez rejouer à une heure spécifique. Cependant, pour 500 bases de données, je comprends que peut-être beaucoup de frais généraux. Slony - Je ne travaillerais probablement pas, puisqu'il se reproduit. Je ne sais pas comment il gère les suppressions de table.

Je ne suis pas au courant d'autres moyens que vous pouvez prendre. Ce que je ferais serait probablement toujours aller pour PITR et tout simplement ne pas faire des erreurs ;). Blague à part, selon la fréquence des erreurs faites cela pourrait être une solution:

  • à mettre en place pour PITR
  • avoir une deuxième instance prête en attente.
  • quand une erreur se produit, rejouez la restauration au point dans le temps sur la deuxième instance.
  • Faire un pg_dump de la base de données concernée à partir de cette instance.
  • faire un pg_restore sur l'instance de production pour cette base de données.

cependant, il serait vous obliger à avoir un deuxième instance prêt, soit sur le même serveur ou sur un autre (différent est recommandé). En outre, le temps de restauration serait un peu plus long car il vous faudrait faire un dump supplémentaire et restaurer.

1
répondu Jimmy Stenke 2009-07-16 10:36:26

ce n'est pas possible avec une seule instance de PostgresSQL.

vous pouvez diviser vos 500 tables entre plusieurs instances, chacune écoutant sur un port différent, mais cela signifierait qu'elles n'utiliseront pas efficacement des ressources comme la mémoire (la mémoire réservée mais non utilisée dans une instance ne peut pas être utilisée par une autre).

Slony ne fonctionnera pas non plus ici, car il ne reproduit pas les déclarations DDL, comme laisser tomber une table.

je recommande faire les deux:

  • "continuez à faire vos sauvegardes pg_dump, mais essayez de lisser pg_dump io bandwith, de sorte qu'il ne va pas paralyser un serveur, et l'exécuter en continu - quand il termine avec la dernière base de données puis commencer immédiatement avec une première;

  • en plus setup PITR.

de Cette façon, vous pouvez restaurer une base de données unique rapide, mais vous pouvez perdre certains données. Si vous décidez que vous ne pouvez pas vous permettre de perdre autant de données, alors vous pouvez restaurer votre sauvegarde PITR à un emplacement temporaire (avec fsync=off et pg_xlog en lien avec ramdisk pour la vitesse), la base de données affectée pg_dump à partir de là et la restaurer à votre base de données principale.

2
répondu Tometzky 2009-07-15 16:49:23

je pense que la façon dont vous faites ceci est imparfaite. Vous devriez avoir une base de données avec plusieurs schémas et rôles. Alors vous pouvez utiliser PITR. Cependant, PITR ne remplace pas les décharges.

1
répondu 2009-07-17 19:51:47