PostgreSQL : script de backup par snapshot LVM

Boris HUISGEN April 13, 2014

administration base de données postgresql lvm snapshot

Le script suivant permet de sauvegarder un cluster PostgreSQL stocké sur une partition LVM. En espérant que vous n’avez pas oublier de conserver de l’espace libre dans le VG !

#!/bin/bash
#
# Backup PostgreSQL cluster from LVM partition
#

PG_VERSION="9.3"
PG_CLUSTER="main"

VG_NAME="vg"
LV_NAME="sql"
LV_SIZE="4G"

MOUNT_DIR="/var/lib/postgresql/tmp"

BACKUP_DIR="/home/backup"

#
# script
#

PATH=/usr/sbin:/usr/bin:/sbin:/bin

DATE=`date +%Y%m%d%H%M%S`
SNAPSHOT="${LV_NAME}_${DATE}"

mkdir -p $BACKUP_DIR
mkdir -p $MOUNT_DIR

echo "Backuping PostgreSQL cluster $PG_VERSION/$PG_CLUSTER from LVM partition $VG_NAME/$LV_NAME"
echo ""

echo "- starting PostgreSQL hot backup"
su -c "psql -c \"SELECT pg_start_backup('$SNAPSHOT');\"" -l postgres

echo "- creating LVM snapshot"
lvcreate -s -L$LV_SIZE -n$SNAPSHOT $VG_NAME/$LV_NAME

echo "- stopping PostgreSQL hot backup"
su -c "psql -c \"SELECT pg_stop_backup();\"" -l postgres

echo "- mounting LVM snapshot"
mkdir -p $MOUNT_DIR
mount /dev/mapper/$VG_NAME-$SNAPSHOT $MOUNT_DIR

echo "- archiving files"
tar czf $BACKUP_DIR/$SNAPSHOT.tar.gz -C $MOUNT_DIR/$PG_VERSION/$PG_CLUSTER .

echo "- cleaning"
umount $MOUNT_DIR
lvremove -f $VG_NAME/$SNAPSHOT

echo ""
echo "Backup $SNAPSHOT done."

See also

MySQL : script de sauvegarde par snapshot LVM
Read more
PostgreSQL : limiter le temps d’exécution des requêtes
Read more
Zabbix : partitionnement des tables PostgreSQL
Read more