postgresql - créer une seconde instance dans un serveur Debian

L'objectif est de faire fonctionner une seconde instance Postgresql dans un serveur, par exemple pour disposer d'administrateurs différents. La seconde instance fonctionnera avec un port TCP différent, ici le port 5433.

Avec Debian et postgresql, l'installation est assez simple. Les outils fournis permettent de faire fonctionner les deux instances en parallèle, avec la même commande de lancement des services.

L'installation a été réalisée avec la version 9.1 de postgresql. La nouvelle instance s'appelle instance2, l'ancienne main.

Installer la nouvelle instance

Créer les dossiers de stockage

Pour la base de données elle-même

cd /var/lib/postgresql/9.1/
mkdir instance2
chmod 700 instance2
chown postgres:postgres instance2

Pour les paramètres

cd /etc/postgresql/9.1
mkdir instance2
chown postgres:postgres instance2

Créer la nouvelle instance

su postgres
/usr/lib/postgresql/9.1/bin/initdb -D /var/lib/postgresql/9.1/instance2
mv /var/lib/postgresql/9.1/instance2/*conf /etc/postgresql/9.1/instance2/

Modifier les paramètres généraux

Seuls sont indiqués les paramètres à adapter.

/etc/postgresql/9.1/instance2/postgresql.conf
data_directory = '/var/lib/postgresql/9.1/instance2'
hba_file = '/etc/postgresql/9.1/instance2/pg_hba.conf'
ident_file = '/etc/postgresql/9.1/instance2/pg_ident.conf'
external_pid_file = '/var/run/postgresql/9.1-instance2.pid'
port = 5433
ssl = true

Récupérer les paramètres de démarrage

cd /etc/postgresql/9.1/instance2/
cp ../main/pg_ctl.conf .
cp ../main/start.conf .
cp ../main/environment .

Recopier les certificats

cd /var/lib/postgresql/9.1/main
cp server* ../instance2/

Il peut être judicieux de créer de nouveaux certificats, ou de les remplacer par des liens vers les certificats généraux de la machine. Pour plus d'informations concernant les certificats, consultez le document Utiliser les certificats SSL avec Ubuntu 10 et Utiliser les certificats numériques avec Linux - création, configuration des services, accès SSH

Démarrer la nouvelle instance

Postgresql va gérer la nouvelle instance comme la principale, la même commande permet de lancer le service tant pour l'instance principale que pour la seconde.

Vous pouvez donc utiliser les commandes suivantes pour gérer l'ensemble de vos instances :

/etc/init.d/postgresql start
/etc/init.d/postgresql restart
/etc/init.d/postgresql reload
(...)

Pour éviter de démarrer l'instance automatiquement, modifiez le fichier /etc/postgresql/9.1/instance2/start.conf

Script de sauvegarde

À adapter à vos besoins, bien sûr !

#!/bin/bash
# script de sauvegarde des bases postgrseql
CHEMIN="/var/lib/postgresql/backup/instance2"
LOG=$CHEMIN"/pgbackup_instance2.log"
echo `date` > $LOG
echo "Sauvegarde des bases de donnees - dumpall" >>$LOG
/usr/bin/pg_dumpall -p 5433 |gzip -c > $CHEMIN/pg.out.gz 2>>$LOG
ls -l $CHEMIN/pg.out.gz >>$LOG
echo "Sauvegarde des bases de donnees individuellement" >>$LOG
for BASE in `psql -l -t -p 5433 |cut -d" " -f2`
do
if test ! "$BASE" = "template0" -a ! "$BASE" = "template1"
then

echo $BASE>>$LOG

/usr/bin/pg_dump -p 5433 $BASE |gzip -c > $CHEMIN/$BASE.sql.gz 2>>$LOG

ls -l $CHEMIN/$BASE.sql.gz >>$LOG

fi
done
echo "Fin de sauvegarde le " `date`>>$LOG

Programmation dans la crontab

30 19 * * * /var/lib/postgresql/backup/instance2/backup.sh