Galera para quem desejar, estou enviando um script que utilizo para
efetuar os backups aqui nos servers que gerencio, é bem simples e
explicativo, dai cada qual poderá alterar para suas necessidades.
Att,
--
#!/bin/bash
# Name: Cleber J Santos
# Email: [EMAIL PROTECTED]
# Icq: 200007837
Fábio Telles Rodriguez wrote:
2008/8/19 Eduardo (Light) <[EMAIL PROTECTED]>:
Pessoal, gostaria de saber como configuro meu postgres para fazer backup
automático do Banco de Dados. Alguém poderia me ajudar? Grato.
A melhor forma que inventaram até hoje é lendo a documentação!!! RTFM.
Eu sei, meu caro, você é um novato... mas tenha paciência... o bakcup
está longe de ser uma operação pouco importante. E você pode descobrir
isso da pior forma.
Vai lá: http://www.postgresql.org/docs/8.3/static/backup.html
Você não vai se arrepender. Agora, para os demais da lista, repitam comigo:
pg_dump != backup
Certo?
[]s
Fábio Telles
--
Assim como uma pequena planta deve enfrentar muitos obstáculos antes de se
transformar numa árvore, nós precisamos experimentar muitas dificuldades no
caminho da felicidade absoluta. (Nitiren Daishonin).
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
--
#!/bin/bash
# Name: Cleber J Santos
# Email: [EMAIL PROTECTED]
# Icq: 200007837
# Features:
# - Automatic backup of Postgresql database
# - Daily, weekly, monthly
# - Rotation of backup files
# Credits:
# This program is based on automatic MySQL backup script by Harley
# (wipe_out at users.sourceforge.net). Thanks Harley, your script is really
nice.
# So, therefore, this program is also released under the GPL which can be obtain
# from http://www.fsf.org
# A little background:
# This program is emerged from the need to have an automatic backup process for
# postgresql database server. After some extensive searching on Google, I came
# across Harley's script. It's for MySQL though. Well, I'm not a bash scriptter,
# so, after some discussion in few lists and experimenting, I managed to get
this
# works.
# Note on postgresql settings:
# By default, postgresql setting is not open, which means we must set the
authentication
# method for the client first. It is done in /var/lib/pgsql/data/pg_hba.conf
file.
# In order to use this program, we can set the method like this:
# host all all 192.168.1.100/32 md5
# where 192.168.1.100 is your backup machine IP.
# There is also one trick in order to be able to do automatic backup.
# Postgresql use it's build-in tools to backup, that is: pg_dump and pg_dumpall.
# Because of it's security measure, we cannot specify the password in the
pg_dump option.
# There is a way though, we can create a file called .pgpass in user directory
who runs
# this script, with this content:
# dbhost:5432:dbname:username:password, (dbhost is your porstgresql server's
IP, so in this program,
# the .pgpass would look like this: 192.168.1.200:5432:dbname:username:password
# Don't forget to chmod the file 600.
# Terjemahan Indonesia:
# Kredit:
# Program ini dibuat berdasarkan script backup MySQL otomatis dari Harley
# (wipe_out at users.sourceforge.net). Terima kasih Harley, script kamu benar2
sip.
# Oleh karena itu, program ini dirilis juga dibawah lisensi GPL yang dapat kita
# peroleh dari http://www.fsf.org
# Sedikit latar belakang:
# Program ini berawal dari kebutuhan akan proses backup otomatis untuk database
server
# Postgresql. Setelah mencari2 di Google, ketemulah script Harley itu, namun
diperuntukkan
# bagi database MySQL. Yah, saya bukan seorang programming bash script, jadinya
setelah
# bertanya2 di milis dan beberapa eksperimen, akhirnya jadi juga program ini.
# Catatan untuk setting postgresql:
# Secara default, settingan postgresql adalah tertutup, dalam arti kita mesti
menyetel
# metode otentifikasinya terlebih dahulu sebelum dapat digunakan. Kita
menyetelnya di file
# /var/lib/pgsql/data/pg_hba.conf. Untuk menggunakan program ini, kita dapat
menyetelnya seperti ini:
# host all all 192.168.1.100/32 md5
# Dimana 192.168.1.100 itu adalah IP tempat kita melakukan backup.
# Ada pula satu buah trick agar kita dapat melakukan backup otomatis di
postgresql.
# Postgresql menggunakan utility build-innya untuk melakukan backup yaitu
pg_dump dan pg_dumpall.
# Karena tingkat securitynya yang tinggi, kita tidak dapat menyebutkan password
postgresql di dalam
# option pg_dump. Beruntungnya, postgresql telah menyediakan mekanisme password
ini melalui file
# bername .pgpass. Isi dari file ini adalah:
dbhost:5432:dbname:username:password (dbhost adalah
# IP dari server postgresql kita. Jadi, sehubungan dengan program ini, file
.pgpass ini akan berisi:
# 192.168.1.200:5432:dbname:username:password
# Jangan lupa untuk me-chmod file ini 600.
###############################
# START SCRIPT - MULAI SCRIPT #
###############################
#!/bin/bash
USERNAME=postgres # username for the connection. username utk koneksinya
DBHOST=127.0.0.1 # match your pgsql server IP. sesuaikan dengan IP server pgsql
kamu
DBNAMES="postgres abres rogerioborges bemvindosoldado napec apl thiago cleber
clinicahumanus zoping" # the database name. nama databasenya
BACKUPDIR="/data/backup/pgsql" # the location to put the backup files. tempat
backup files
MAILCONTENT="stdout"
MAILADDR="[EMAIL PROTECTED]"
COMP=gzip
OPT="all"
# What do we want to backup.
# Apa yg mau di backup:
# "all" = schema + data
# "schema" = schema
# "data" = data
SEPDIR="yes"
DOWEEKLY=6
# On what day we want the weekly backup to be done. 1 = Monday
# Pada hari apa kita ingin backup mingguan dilakukan, 1 = Senin
DATE=`date +%Y-%m-%d_%Hh%Mm` # Datestamp misalnya 2006-03-21
DOW=`date +%A` # Day of the week, misalnya Sunday
DNOW=`date +%u` # Day number of the week, misalnya Senin = 1
DOM=`date +%d` # Date of the month, misalnya 27
M=`date +%B` # Bulan, misalnya January
W=`date +%V` # Week number, misalnya minggu ke-37
LOGFILE=$BACKUPDIR/$DBHOST-`date +%N`.log # Nama logfilenya
LOGERR=$BACKUPDIR/ERRORS_$DBHOST-`date +%N`.log # Nama logfile utk error
BACKUPFILES=""
OPT=""
# Create necessary directory
# Create direktori yang diperlukan
if [ ! -e "$BACKUPDIR" ]
then
mkdir -p "$BACKUPDIR"
fi
if [ ! -e "$BACKUPDIR/daily" ] # Check if Daily Directory exists.
then
mkdir -p "$BACKUPDIR/daily"
fi
if [ ! -e "$BACKUPDIR/weekly" ] # Check if Weekly Directory exists.
then
mkdir -p "$BACKUPDIR/weekly"
fi
if [ ! -e "$BACKUPDIR/monthly" ] # Check if Monthly Directory exists.
then
mkdir -p "$BACKUPDIR/monthly"
fi
# Make logfile
# Membuat logfile
touch $LOGFILE
exec 6>&1
exec > $LOGFILE # Link file descriptor #6 with stdout.
# Saves stdout.
touch $LOGERR
exec 7>&2 # Link file descriptor #7 with stderr.
# Saves stderr.
exec 2> $LOGERR # stderr replaced with file $LOGERR.
if [ "$OPT" = "all" ]; then
OPT = ""
elif [ "OPT" = "data" ]; then
OPT = "-a"
elif [ "OPT" = "schema" ]; then
OPT = "-s"
fi
# Database dump function
dbdump () {
pg_dump -O $OPT -U $USERNAME -h $DBHOST -d $1 > $2
return 0
}
# Compression function plus latest copy
SUFFIX=""
compression () {
if [ "$COMP" = "gzip" ]; then
gzip -f "$1"
echo
echo Backup Information for "$1"
gzip -l "$1.gz"
SUFFIX=".gz"
elif [ "$COMP" = "bzip2" ]; then
echo Compression information for "$1.bz2"
bzip2 -f -v $1 2>&1
SUFFIX=".bz2"
else
echo "No compression option set, check advanced
settings"
fi
return 0
}
# Hostname for LOG information
if [ "$DBHOST" = "localhost" ]; then
HOST=`hostname`
if [ "$SOCKET" ]; then
OPT="$OPT --socket=$SOCKET"
fi
else
HOST=$DBHOST
fi
# Test is seperate DB backups are required
if [ "$SEPDIR" = "yes" ]; then
echo Backup Start Time `date`
echo ======================================================================
# Monthly Full Backup of all Databases
if [ $DOM = "01" ]; then
for MDB in $MDBNAMES
do
# Prepare $DB for using
MDB="`echo $MDB | sed 's/%/ /g'`"
if [ ! -e "$BACKUPDIR/monthly/$MDB" ] # Check
Monthly DB Directory exists.
then
mkdir -p "$BACKUPDIR/monthly/$MDB"
fi
echo Monthly Backup of $MDB...
dbdump "$MDB"
"$BACKUPDIR/monthly/$MDB/${MDB}_$DATE.$M.$MDB.sql"
compression
"$BACKUPDIR/monthly/$MDB/${MDB}_$DATE.$M.$MDB.sql"
BACKUPFILES="$BACKUPFILES
$BACKUPDIR/monthly/$MDB/${MDB}_$DATE.$M.$MDB.sql$SUFFIX"
echo
----------------------------------------------------------------------
done
fi
for DB in $DBNAMES
do
# Prepare $DB for using
DB="`echo $DB | sed 's/%/ /g'`"
# Create Seperate directory for each DB
if [ ! -e "$BACKUPDIR/daily/$DB" ] # Check Daily DB
Directory exists.
then
mkdir -p "$BACKUPDIR/daily/$DB"
fi
if [ ! -e "$BACKUPDIR/weekly/$DB" ] # Check Weekly DB
Directory exists.
then
mkdir -p "$BACKUPDIR/weekly/$DB"
fi
# Weekly Backup
if [ $DNOW = $DOWEEKLY ]; then
echo Weekly Backup of Database \( $DB \)
echo Rotating 5 weeks Backups...
if [ "$W" -le 05 ];then
REMW=`expr 48 + $W`
elif [ "$W" -lt 15 ];then
REMW=0`expr $W - 5`
else
REMW=`expr $W - 5`
fi
eval rm -fv "$BACKUPDIR/weekly/$DB_week.$REMW.*"
echo
dbdump "$DB"
"$BACKUPDIR/weekly/$DB/${DB}_week.$W.$DATE.sql"
compression
"$BACKUPDIR/weekly/$DB/${DB}_week.$W.$DATE.sql"
BACKUPFILES="$BACKUPFILES
$BACKUPDIR/weekly/$DB/${DB}_week.$W.$DATE.sql$SUFFIX"
echo
----------------------------------------------------------------------
# Daily Backup
else
echo Daily Backup of Database \( $DB \)
echo Rotating last weeks Backup...
eval rm -fv "$BACKUPDIR/daily/$DB/*.$DOW.sql.*"
echo
dbdump "$DB" "$BACKUPDIR/daily/$DB/${DB}_$DATE.$DOW.sql"
compression "$BACKUPDIR/daily/$DB/${DB}_$DATE.$DOW.sql"
BACKUPFILES="$BACKUPFILES
$BACKUPDIR/daily/$DB/${DB}_$DATE.$DOW.sql$SUFFIX"
echo
----------------------------------------------------------------------
fi
done
echo Backup End `date`
echo ======================================================================
echo Total disk space used for backup storage..
echo Size - Location
echo `du -hs "$BACKUPDIR"`
echo
#Clean up IO redirection
exec 1>&6 6>&- # Restore stdout and close file descriptor #6.
exec 1>&7 7>&- # Restore stdout and close file descriptor #7.
if [ "$MAILCONTENT" = "files" ]
then
if [ -s "$LOGERR" ]
then
# Include error log if is larger than zero.
BACKUPFILES="$BACKUPFILES $LOGERR"
ERRORNOTE="WARNING: Error Reported - "
fi
#Get backup size
ATTSIZE=`du -c $BACKUPFILES | grep "[[:digit:][:space:]]total$" |sed
s/\s*total//`
if [ $MAXATTSIZE -ge $ATTSIZE ]
then
BACKUPFILES=`echo "$BACKUPFILES" | sed -e "s# # -a #g"` #enable
multiple attachments
mutt -s "$ERRORNOTE MySQL Backup Log and SQL Files for $HOST -
$DATE" $BACKUPFILES $MAILADDR < $LOGFILE #send via mutt
else
cat "$LOGFILE" | mail -s "WARNING! - MySQL Backup exceeds set
maximum attachment size on $HOST - $DATE" $MAILADDR
fi
elif [ "$MAILCONTENT" = "log" ]
then
cat "$LOGFILE" | mail -s "MySQL Backup Log for $HOST - $DATE" $MAILADDR
if [ -s "$LOGERR" ]
then
cat "$LOGERR" | mail -s "ERRORS REPORTED: MySQL Backup
error Log for $HOST - $DATE" $MAILADDR
fi
elif [ "$MAILCONTENT" = "quiet" ]
then
if [ -s "$LOGERR" ]
then
cat "$LOGERR" | mail -s "ERRORS REPORTED: MySQL Backup
error Log for $HOST - $DATE" $MAILADDR
cat "$LOGFILE" | mail -s "MySQL Backup Log for $HOST -
$DATE" $MAILADDR
fi
else
if [ -s "$LOGERR" ]
then
cat "$LOGFILE"
echo
echo "###### WARNING ######"
echo "Errors reported during AutoMySQLBackup
execution.. Backup failed"
echo "Error log below.."
cat "$LOGERR"
else
cat "$LOGFILE"
fi
fi
if [ -s "$LOGERR" ]
then
STATUS=1
else
STATUS=0
fi
fi
# Clean up Logfile
eval rm -f "$LOGFILE"
eval rm -f "$LOGERR"
exit $STATUS
# Well, I'm not a bash scriptter, so I'm sure there must be a much better way
to do it, even I'm also quite sure
# that this program has some bug to be found. So, any suggestion is most
welcome. Please contact me
# at: fajarpri at arinet dot org, and pls do stop by my website at
http://linux2.arinet.org. Thanks.
# Saya bukan programmer bash script, dan karenanya saya yakin banget ada cara
yang jauh lebih baik di dalam
# mencapai apa yang diinginkan oleh program ini, dan juga pasti ada beberapa
bug di dalam program ini. Oleh karena
# itu, semua saran/koreksi sangat diharapkan. Saya dapat dihubungi melalui
email fajarpri at arinet dot org, dan
# website http://linux2.arinet.org
# Knowledge belongs to everyone.
# Disclaimer. Please note, that this script is provided as is. So, you'd better
test it in your system.
# You must make sure that all backuped files are valid to be restored just in
case.
# Disclaimer. Mohon diperhatikan, script ini dipersembahkan apa adanya.
Sebaiknya di test dahulu di system kamu.
# Kamu mesti benar2 memastikan bahwa file backup yang dihasilkan dapat
digunakan seandainya terpaksa dilakukan restore data.
# Version
# 0.1 -- 13 March 2006 -- Initial release
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral