2017-07-21 11 views
1

J'ai deux serveurs avec la même version de postgres (9.4). Je voudrais faire une base de données clone rapide (sauvegarde et restauration). Comme je le comprends "créer la base de données xxx à partir du modèle" est le moyen le plus rapide de faire une copie de la base de données.postgres, créer une base de données à partir d'un modèle sur un serveur externe

Comment puis-je faire du clonage d'un serveur à un autre? Puis-je utiliser dblink pour cette tâche et comment?

Je connais une solution qui utilise pg_dump et pg_restore (psql), mais je pense que c'est trop lent pour moi. Par exemple, la base de données de 5 Go a été restaurée environ 12 minutes (avec l'option -j dans pg_restore) et sauvegardée environ 2 minutes.

Une autre façon, peut être, Puis-je copier des fichiers postgres (/ var/lib/postgresql/*) à un autre serveur, et exécuter postgres là? Comment trouver ces fichiers?

Répondre

1

Vous ne pouvez pas utiliser une base de données provenant d'un cluster de base de données différent (sur la même machine ou sur une machine différente) en tant que modèle pour créer une nouvelle base de données.

La seule méthode existante pour copier une base de données d'un cluster à l'autre est pg_dump/pg_restore. Une copie physique est le moyen le plus rapide, mais vous ne pouvez pas copier des fichiers ou des bases de données individuels d'un cluster de base de données à un autre. Si cela ne vous dérange pas de copier l'ensemble du cluster de base de données, il est possible d'arrêter et de supprimer le cluster de base de données cible, d'effectuer une sauvegarde physique du cluster de base de données source, de modifier la configuration nouvelle copie.

Si pg_basebackup est trop lent pour vous, vous pouvez effectuer une sauvegarde en ligne “ main ” avec pg_start_backup et pg_stop_backup et copiez les fichiers inbetween avec la technologie la plus rapide que vous avez.

S'il n'y a pas de problème pour arrêter le cluster de base de données source, vous n'avez pas à vous soucier de la récupération et vous serez encore plus rapide.

0

Vous ne pouvez pas copier un modèle, comme le dit Laurenz. La raison en est qu'il doit être intégré dans les catalogues partagés de postgres comme pg_database, etc, et parce qu'il partage des ressources à l'échelle de la base de données comme le journal des transactions (pg_clog).

En théorie, vous fait pourrait copier un modèle à partir d'une autre machine si toutes les lignes ont été gelés par VACUUM FREEZE. Mais vous devrez faire une configuration manuelle pour intégrer le modèle copié, et ce serait sujettes aux bugs et risqué. Vous auriez besoin d'une très bonne connaissance des internes postgres.

Ça n'en vaut vraiment pas la peine.