Différences
Cette page vous affiche les différences entre la révision choisie et la version actuelle de la page.
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