Différences

Cette page vous affiche les différences entre la révision choisie et la version actuelle de la page.

Lien vers cette vue comparative

scripts:exemples:postgresql [2007/04/06 13:23]
lois nouvelle version du script, plus complète
scripts:exemples:postgresql [2007/08/08 16:55] (Version actuelle)
lois mise à jour v1, ajout v2
Ligne 1: Ligne 1:
 +====== Administration de PostgreSQL ======
 +
 +===== Arrêt / Démarrage =====
 +
 +Sur une base de ''/​etc/​init.d/​skeleton'',​ peut être encore largement amélioré :
 +
 +<code bash>
 +#!/bin/sh -e
 +# /​etc/​init.d/​postgresql
 +# $Id
 +#
 +PGDIR="/​usr/​local/​pgsql"​
 +PGBIN="​$PGDIR/​bin"​
 +PGDATA="/​usr/​local/​pgsql/​data"​
 +PGLOG="/​var/​log/​postgresql.log"​
 +DESC="​Postgresql database server"​
 +USER="​postgres"​
 +
 +test -x $PGDIR || exit 0
 +
 +
 +case "​$1"​ in
 +    start)
 +        echo -n "​Starting $DESC: "
 +        su - $USER -- $PGBIN/​pg_ctl -D $PGDATA start
 +        echo -n ""​
 +        ;;
 +    stop)
 +        echo -n "​Stopping $DESC: "
 +        su - $USER -- $PGBIN/​pg_ctl -D $PGDATA -m f stop
 +        echo -n ""​
 +        ;;
 +    reload)
 +        echo -n "​Reloading configuration $DESC: "
 +        su - $USER -- $PGBIN/​pg_ctl -D $PGDATA reload
 +        echo -n ""​
 +        ;;
 +    restart|force-reload)
 +        echo -n "​Restarting $DESC: "
 +        su - $USER -- $PGBIN/​pg_ctl -D $PGDATA -m f stop
 +        sleep 1
 +        su - $USER -- $PGBIN/​pg_ctl -D $PGDATA start
 +        echo -n ""​
 +        ;;
 +    status)
 +        echo -n "$DESC current status: "
 +        su - $USER -- $PGBIN/​pg_ctl -D $PGDATA status
 +        echo -n ""​
 +        ;;
 +    *)
 +        echo "​Usage:​ $0 {start|stop|restart|reload|force-reload|status}"​
 +        echo -n ""​
 +        exit 1
 +        ;;
 +esac
 +
 +exit 0
 +</​code>​
 +
 +
 +
 +===== Administration =====
 +
 +====En taches separees====
 +
 +À faire tourner par cron ou équivalent. Exemple avec ''/​etc/​crontab''​ :
 +
 +<code bash>
 +46 6 * * * root /​root/​adm/​postgresql.sh vacuum
 +00 7 * * * root /​root/​adm/​postgresql.sh backup
 +</​code>​
 +
 +<code bash>
 +#!/bin/bash
 +# manipulations sur le serveur postgresql, via cron
 +#
 +# $Id: postgresql-adm-v1.sh 72 2007-08-08 11:18:26Z maintenance $
 +
 +PGDIR="/​usr/​local/​pgsql"​
 +PGBIN="​$PGDIR/​bin"​
 +PGDATA="/​usr/​local/​pgsql/​data"​
 +PGOPTIONS='​-c client_min_messages=error'​
 +DESC="​Postgresql database server"​
 +USER="​postgres"​
 +DATE=$(date +%Y%m%d)
 +TMPFILE=$(mktemp /​tmp/​postgresql-adm.XXXXXXXX) || exit 1
 +HOST=$(hostname)
 +BACKUPDIR="/​opt/​postgres-data"​
 +
 +test -x $PGDIR || exit 0
 +
 +case "​$1"​ in
 +        status)
 +        echo -n "$DESC current status: " >> $TMPFILE 2>&1
 +        su - $USER -c "​$PGBIN/​pg_ctl -D $PGDATA status"​ >> $TMPFILE 2>&1
 +        echo ""​ >> $TMPFILE 2>&1
 +        ;;
 +        vacuum)
 +        echo -n "$DESC vacuuming all databases: " >> $TMPFILE 2>&1
 +        export $PGOPTIONS >> /dev/null 2>&1
 +        su - $USER -c "​$PGBIN/​vacuumdb --full --analyze --all" >> $TMPFILE 2>&1
 +        su - $USER -c "​$PGBIN/​reindexdb --all --quiet"​ >> $TMPFILE 2>&1
 +#        su - $USER -c "​$PGBIN/​reindexdb --all" >> $TMPFILE 2>&1
 +        echo -n ""​ >> $TMPFILE 2>&1
 +        ;;
 +        analyze)
 +        echo -n "$DESC analyzing all databases: " >> $TMPFILE 2>&1
 +        su - $USER -c "​$PGBIN/​vacuumdb --analyze --all" >> $TMPFILE 2>&1
 +        echo -n ""​ >> $TMPFILE 2>&1
 +        ;;
 +        backup)
 +        echo "$DESC backuping: " >> $TMPFILE 2>&1
 +        mkdir -p $BACKUPDIR >> $TMPFILE 2>&1
 +        su - $USER -c "​$PGBIN/​pg_dumpall > $BACKUPDIR/​dumpall.sql"​ >> $TMPFILE 2>&1
 +        su - $USER -c "​savelog -c 15 -p -j $BACKUPDIR/​dumpall.sql"​ >> $TMPFILE 2>&1
 +        echo ""​
 +        ;;
 +        *)
 +        echo "​Usage:​ $0 {status|vacuum|analyze|backup}"​
 +        echo ""​
 +        exit 1
 +        ;;
 +esac
 +
 +if [ -s $TMPFILE ]
 +        then /bin/cat $TMPFILE | /​usr/​bin/​mailx -s "$HOST : postgresql" ​ admin@example.com -- -f root@example.com
 +fi
 +/bin/rm -f $TMPFILE
 +
 +exit 0
 +
 +</​code>​
 +
 +====One shot====
 +
 +Toujours en //​crontab//,​ ''/​etc/​crontab''​ :
 +
 +<code bash>
 +46 6 * * * root /​root/​adm/​postgresql-adm.sh
 +</​code>​
 +
 +<code bash>
 +#!/bin/bash
 +# manipulations sur le serveur postgresql, via cron
 +#
 +# $Id: postgresql-adm-v2.sh 72 2007-08-08 11:18:26Z maintenance $
 +
 +PGDIR="/​usr/​local/​pgsql"​
 +PGBIN="​$PGDIR/​bin"​
 +PGDATA="/​usr/​local/​pgsql/​data"​
 +PGOPTIONS='​-c client_min_messages=error'​
 +DESC="​db server"​
 +USER="​postgres"​
 +DATE=$(date +%Y%m%d)
 +TMPFILE=$(mktemp /​tmp/​postgresql-adm.XXXXXXXX) || exit 1
 +HOST=$(hostname)
 +BACKUPDIR="/​opt/​postgres-data"​
 +
 +test -x $PGDIR || exit 1
 +
 +export $PGOPTIONS >> /dev/null 2>&1
 +
 +# status
 +echo "​====================================="​ >> $TMPFILE 2>&1
 +echo "$DESC current status: " >> $TMPFILE 2>&1
 +/bin/su - $USER -c "​$PGBIN/​pg_ctl -D $PGDATA status"​ >> $TMPFILE 2>&1
 +echo ""​ >> $TMPFILE 2>&1
 +
 +# vacuum
 +echo "​====================================="​ >> $TMPFILE 2>&1
 +echo "$DESC vacuuming all databases: " >> $TMPFILE 2>&1
 +/bin/su - $USER -c "​$PGBIN/​vacuumdb --full --analyze --all" >> $TMPFILE 2>&1
 +echo ""​ >> $TMPFILE 2>&1
 +
 +# index
 +echo "​====================================="​ >> $TMPFILE 2>&1
 +echo "$DESC reindexing all databases: " >> $TMPFILE 2>&1
 +/bin/su - $USER -c "​$PGBIN/​reindexdb --all" >> $TMPFILE 2>&1
 +echo ""​ >> $TMPFILE 2>&1
 +
 +# analyze
 +# FIXME: C'est peut-être de trop avec le vacuum d'​au-dessus...
 +echo "​====================================="​ >> $TMPFILE 2>&1
 +echo "$DESC analyzing all databases: " >> $TMPFILE 2>&1
 +/bin/su - $USER -c "​$PGBIN/​vacuumdb --analyze --all" >> $TMPFILE 2>&1
 +echo ""​ >> $TMPFILE 2>&1
 +
 +# backup
 +echo "​====================================="​ >> $TMPFILE 2>&1
 +echo "$DESC backuping: " >> $TMPFILE 2>&1
 +/bin/mkdir -p $BACKUPDIR >> $TMPFILE 2>&1
 +/bin/su - $USER -c "​$PGBIN/​pg_dumpall > $BACKUPDIR/​dumpall.sql"​ >> $TMPFILE 2>&1
 +/bin/su - $USER -c "/​usr/​bin/​savelog -c 15 -p -j $BACKUPDIR/​dumpall.sql"​ >> $TMPFILE 2>&1
 +echo ""​ >> $TMPFILE 2>&1
 +
 +# mail recapitulatif
 +if [ -s $TMPFILE ]
 +        then /bin/cat $TMPFILE | /​usr/​bin/​mailx -a "From: $HOST <​root@example.com>"​ -s "$HOST : postgresql" ​ admin@example.com --
 +fi
 +/bin/rm -f $TMPFILE
 +
 +exit 0
 +</​code>​
  
 
scripts/exemples/postgresql.txt · Dernière modification: 2007/08/08 16:55 par lois