Sur un PostgreSQL v9.0, j'ai un système d'archivage WAL qui fonctionne. Le WAL dépose donc un archivage régulier (lorsque 3 WAL sont créés ou si un WAL a plus de 15 minutes).
J'ajoute maintenant un pack binaire du répertoire PG_DATA (à l'exclusion du sous-répertoire pg_xlog). Pour ce faire, j'exécute une pg_start_backup(),
copie binaire et a pg_stop_backup()
.
Je pense que je comprends très bien ce que font pg_start_backup et pg_stop_backup, le premier fait un point de contrôle et le dernier s'assure que le dernier fichier WAL est archivé.
D'après la documentation officielle, nous pouvons voir que pour la copie de données binaires, nous devons:
Effectuez la sauvegarde à l'aide de tout outil de sauvegarde de système de fichiers pratique tel que tar ou cpio (pas pg_dump ou pg_dumpall). Il n'est ni nécessaire ni souhaitable d'arrêter le fonctionnement normal de la base de données pendant cette opération.
Je suis donc assez perplexe. Cela signifie qu'un point de contrôle pourrait être effectué pendant que nous faisons la copie. J'ai vu beaucoup de documentation indiquant que la commande de copie devrait permettre des changements de données lors de la copie, je suis d'accord avec ça, il suffit simplement de trouver le bon outil. Mais ma question est de savoir comment postgreSQL gérera la récupération avec un contenu pg_data contenant certains fichiers qui sont incohérents (certains d'avant le point de contrôle, d'autres d'après)?
En relisant les journaux de transactions, Postgresql pourra mettre tous ces fichiers dans le bon état? J'ai vu que les opérations de création de tables et de suppression sont dangereuses pendant la sauvegarde. N'y a-t-il pas des opérations dangereuses comme les commandes de vide ? Le pg_backup suspend-il les opérations de vide? Dois-je faire une copie du fichier global / pg_control à la fin du début du processus de copie binaire? Dois-je utiliser un système de fichiers prenant en charge les instantanés (comme avec un xfs-freeze) pour obtenir un processus de restauration plus rapide?
J'ai vu qu'un crash de script de sauvegarde ne lancerait pas automatiquement pg_stop_backup, il y a donc une chance que mon état de sauvegarde vive longtemps (jusqu'à ce que mon nagios appelle quelqu'un quelque part pour corriger le pg_stop_backup ()). Donc, si quelque chose est différent dans PostgreSQL entre ces deux commandes, j'aimerais le savoir, pour comprendre quel impact cela peut avoir.
Éclairez-moi s'il vous plaît.