Josue Kouka

Josue Kouka

Code, Linux, and open source — one post at a time.

04 Feb 2013

Copier une base PostgreSQL de production vers un serveur de developpement

Salut !!!! Cet article a ete ecrit a l’origine pour un projet OpenERP, mais la technique elle-meme n’a rien de specifique a OpenERP : c’est simplement la sequence pg_dump / scp / psql pour copier n’importe quelle base PostgreSQL de production vers un serveur de developpement, sans outil GUI comme pgAdmin ^_^. Les etapes qui suivent gardent volontairement le contexte OpenERP d’origine (les noms de services a arreter/relancer), mais la partie PostgreSQL se transpose telle quelle a n’importe quelle stack.

Prérequis :

  • Connaissances basiques en administration linux/unix
  • Connaissances basiques SQL et administration PostgreSQL

Context :

  • serveur de bdd production : 192.168.1.2 # HOSTNAME = prod
  • serveur de bdd developpement : 192.168.1.3 # HOSTNAME = preprod
  • Le nom de notre base de données est pikachu

Production

Se connecter au serveur de base de données

ssh root@192.168.1.2

Se connecter en tant qu’utilisateur postgres

#su postgres

Exporter la base de données

postgres@prod:/root/backup$ pg_dump pikachu -U postgres > ./backup/db_backup

db_backup est le nom du fichier contenant la base de données exportée

# su postgres
prod:~#ssh root@192.168.1.3

Copier la base de données de production sur le serveur de développement

preprod:~# scp root@192.168.1.2:/root/backup/db_backup ./backups/

Stopper les services Openerp et Apache(Web, si necéssaire)

preprod:~#/etc/init.d/openerp stop #Arret du serveur openerp de developpement
preprod:~#/etc/init.d/apache2 stop #Arret du serveur web de developpement

Connecter vous en tant qu’utilisqteur postgres (on est sur le serveur de developpement cette fois-ci)

preprod:~#su postgres

Créer une base de données temporaire

postgres@preprod:/root$psql
postgres=# create database pikachu_prod with owner=openerp template=template0 encoding='UTF-8' ;
postgres=#\q

Charger le fichier de base de données recuperé en production vers la base de données de développement

postgres@preprod:/root/backups$ cat db_backup | psql pikachu_prod

Vous pouvez vérifier qu’on a deux bases ( pikachu , pikachu_prod) avec la commande:

postgres=#\l

Supprimer la base de développement et renommer la base de production avec le nom de celle de développement

postgres@preprod:/root/backups$ psql
postgres=# drop database pikachu ;
postgres=# alter DATABASE pikachu_prod RENAME TO pikcachu ;
   	

Relancez les services Openerp et Apache(Web)

preprod:~#/etc/init.d/openerp start #Demarrage du serveur openerp de développement
preprod:~#/etc/init.d/apache2 start #Demarrage du serveur web de développement

Voila !!!