Skip to content

Backupp et restauration d'une base de donnée PostgreSQL

Prérequis

  • 2 serveurs sous linux ({serveur-1} et {serveur-2}) avec un accès SSH ouvert avec les utilisteurs {user-server-1} et {user-server-2}
  • Une base de donnée PostgreSQL {bdd_name}

Backup de la base de donées sur le serveur 1

Sur le serveur 1

Backup de la base de donnée

cd /tmp && sudo -u postgres pg_dump {bdd_name} | gzip -9 > {bdd_name}_backup.sql.gz

Restauration de la BDD sur le serveur 2

Sur le serveur 2

Récupération du backup

scp {user-server-1}@{serveur-1}:/tmp/{bdd_name}_backup.sql.gz /tmp

Dézip du fichier de backup

gunzip {bdd_name}_backup.sql.gz
sudo chown postgres:postgres {bdd_name}_backup.sql

Connexion à postgres

sudo -iu postgres
psql

Création de la base

DROP DATABASE "{bdd_name}";
CREATE DATABASE "{bdd_name}" OWNER "postgres" ENCODING 'UTF8' LC_COLLATE = 'fr_FR.UTF-8' LC_CTYPE = 'fr_FR.UTF-8' template=template0;
exit

Exécution du backup sur la base

cd /tmp/
psql -U postgres -b {bdd_name} -f {bdd_name}_backup.sql

Commandes utiles

Terminer toutes les connexions à la base de donnée à restaurer

REVOKE CONNECT ON DATABASE {bdd_name} FROM public; 

Vérifier que toutes les connexions à la base de données sont closes

SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = '{bdd_name}';