PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment sauvegarder et restaurer une base de données PostgreSQL

Dans un environnement de production, quelle que soit la taille de votre PostgreSQL base de données peut être, le retour régulier est un aspect essentiel de la gestion de base de données. Dans cet article, vous apprendrez comment sauvegarder et restaurer une base de données PostgreSQL.

Nous supposons que vous disposez déjà d'une installation fonctionnelle du système de base de données PostgreSQL. Sinon, lisez nos articles suivants pour installer PostgreSQL sur votre distribution Linux.

  • Comment installer PostgreSQL et pgAdmin4 dans Ubuntu 20.04
  • Comment installer PostgreSQL et pgAdmin dans CentOS 8
  • Comment installer PostgreSQL et pgAdmin dans RHEL 8

Commençons…

Sauvegarder une seule base de données PostgreSQL

PostgreSQL fournit le pg_dump utilitaire pour vous aider à sauvegarder les bases de données. Il génère un fichier de base de données avec des commandes SQL dans un format qui peut être facilement restauré à l'avenir.

Pour sauvegarder, un PostgreSQL base de données, commencez par vous connecter à votre serveur de base de données, puis passez à Postgres compte utilisateur et exécutez pg_dump comme suit (remplacez tecmintdb avec le nom de la base de données que vous souhaitez sauvegarder). Par défaut, le format de sortie est un fichier de script SQL en texte brut.

$ pg_dump tecmintdb > tecmintdb.sql

Le pg_dump prend également en charge d'autres formats de sortie. Vous pouvez spécifier le format de sortie en utilisant le -F option, où c signifie fichier d'archive au format personnalisé, d signifie archive au format de répertoire, et t signifie fichier d'archive au format tar :tous les formats conviennent à l'entrée dans pg_restore .

Par exemple :

$ pg_dump -F c tecmintdb > tecmintdb.dump
OR
$ pg_dump -F t tecmintdb > tecmintdb.tar

Pour vider la sortie dans le format de sortie du répertoire, utilisez le -f flag (qui est utilisé pour spécifier le fichier de sortie) pour spécifier le répertoire cible au lieu d'un fichier. Le répertoire qui sera créé par pg_dump ne doit pas exister.

$ pg_dump -F d tecmintdb -f tecmintdumpdir	

Pour sauvegarder tout PostgreSQL bases de données, utilisez le pg_dumpall outil comme indiqué.

$ pg_dumpall > all_pg_dbs.sql

Vous pouvez restaurer le vidage en utilisant psql comme indiqué.

$ pgsql -f all_pg_dbs.sql postgres

Restauration d'une base de données PostgreSQL

Pour restaurer un PostgreSQL base de données, vous pouvez utiliser le psql ou pg_restore utilitaires. psql est utilisé pour restaurer les fichiers texte créés par pg_dump alors que pg_restore est utilisé pour restaurer une base de données PostgreSQL à partir d'une archive créée par pg_dump dans l'un des formats de texte non brut (personnalisé, tar ou répertoire).

Voici un exemple de restauration d'un vidage de fichier en texte brut :

$ psql tecmintdb < tecmintdb.sql

Comme mentionné ci-dessus, un vidage au format personnalisé n'est pas un script pour pgsql , il doit donc être restauré avec pg_restore comme indiqué.

$ pg_restore -d tecmintdb tecmintdb.dump
OR
$ pg_restore -d tecmintdb tecmintdb.tar
OR
$ pg_restore -d tecmintdb tecmintdumpdir	

Sauvegarder de grandes bases de données PostgreSQL

Si la base de données que vous sauvegardez est volumineuse et que vous souhaitez générer un fichier de sortie assez petit, vous pouvez exécuter un vidage compressé où vous devez filtrer la sortie de pg_dump via un outil de compression tel que gzip ou l'un de vos favoris :

$ pg_dump tecmintdb | gzip > tecmintdb.gz

Si la base de données est extrêmement volumineuse, vous pouvez effectuer un vidage en parallèle en vidant number_of_jobs tables simultanément en utilisant le -j drapeau, comme indiqué.

$ pg_dump -F d -j 5 -f tecmintdumpdir

Il est important de noter que l'option de vidage parallèle réduit le temps de vidage, mais d'un autre côté, elle augmente également la charge sur le serveur de base de données.

Sauvegarder les bases de données PostgreSQL distantes

pg_dump est un outil client PostgreSQL standard, il prend en charge les opérations sur les serveurs de base de données distants. Pour spécifier le serveur de base de données distant pg_dump doit contacter, utilisez les options de ligne de commande -h pour spécifier l'hôte distant et -p spécifie le port distant sur lequel le serveur de base de données écoute. De plus, utilisez le -U flag pour spécifier le nom du rôle de base de données sous lequel se connecter.

N'oubliez pas de remplacer 10.10.20.10 et 5432 et tecmintdb avec l'adresse IP ou le nom d'hôte de votre hôte distant, le port de la base de données et le nom de la base de données respectivement.

$ pg_dump -U tecmint -h 10.10.20.10 -p 5432 tecmintdb > tecmintdb.sql

Assurez-vous que l'utilisateur qui se connecte à distance dispose des privilèges requis pour accéder à la base de données et que la méthode d'authentification de base de données appropriée est configurée sur le serveur de base de données, sinon vous obtiendrez une erreur comme celle illustrée dans la capture d'écran suivante.

Il est également possible de dumper une base de données directement d'un serveur à un autre, utilisez le pg_dump et psql utilitaires comme indiqué.

$ pg_dump -U tecmint -h 10.10.20.10 tecmintdb | pqsl -U tecmint -h 10.10.20.30 tecmintdb

Sauvegarde automatique de la base de données PostgreSQL à l'aide d'une tâche Cron

Vous pouvez effectuer des sauvegardes à intervalles réguliers en utilisant cron emplois. Cron Les tâches sont un moyen couramment utilisé pour planifier différents types de tâches à exécuter sur un serveur.

Vous pouvez configurer une tâche cron pour automatiser PostgreSQL sauvegarde de la base de données comme suit. Notez que vous devez exécuter les commandes suivantes en tant que superutilisateur PostgreSQL :

$ mkdir -p /srv/backups/databases

Ensuite, exécutez la commande suivante pour modifier la crontab afin d'ajouter une nouvelle tâche cron.

$ crontab -e

Copiez et collez la ligne suivante à la fin de la crontab. Vous pouvez utiliser n'importe lequel des formats de vidage expliqués ci-dessus.

0 0 * * *  pg_dump  -U postgres tecmintdb > /srv/backups/postgres/tecmintdb.sql

Enregistrez le fichier et quittez.

Le service cron démarrera automatiquement l'exécution de cette nouvelle tâche sans redémarrage. Et cette tâche cron s'exécutera tous les jours à minuit, c'est une solution minimale à la tâche de sauvegarde.

Pour plus d'informations sur la planification des tâches cron, consultez :Comment créer et gérer des tâches cron sous Linux

C'est tout pour le moment! C'est une bonne idée d'intégrer la sauvegarde des données à votre routine de gestion de base de données. Pour nous joindre pour toute question ou commentaire, utilisez le formulaire de commentaires ci-dessous. Pour plus d'informations, consultez les pages de référence pg_dump et pg_restore.