PostgreSQL : script de backup par snapshot LVM

Boris HUISGEN
Boris HUISGEN
|

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."
Boris HUISGEN
Boris HUISGEN
Blog owner
  • #lvm
  • #postgresql