26 votos

¿' Es la mejor manera de automatizar el respaldo de bases de datos PostgreSQL?

Me resulta tedioso tener a bases de datos de copia de seguridad cada semana. Y también creo que cada semana copias de seguridad deberían convertirse en copias de seguridad diarias. Si tuviera que hacerlo, no quiero hacerlo manualmente. ¿Cuál es la mejor manera de automatizar el respaldo de bases de datos PostgreSQL diariamente?

50voto

kristofer Puntos 11

de la misma manera que para cualquier otra tarea repetitiva que puede ser automatizado - se escribe una secuencia de comandos para hacer la copia de seguridad y, a continuación, configurar una tarea en el cron para que se ejecute.

un script como el siguiente, por ejemplo:

(Nota: se debe ejecutar como usuario postgres, o cualquier otro usuario con el mismo privs)

#! /bin/bash

# backup-postgresql.sh
# por Craig Sanders 
# este script es de dominio público. siéntase libre de utilizar o modificar como quieras.

DUMPALL="/usr/bin/pg_dumpall"
PGDUMP="/usr/bin/pg_dump"
PSQL="/usr/bin/psql"

# directorio para guardar las copias de seguridad, debe ser rwx por el usuario postgres
BASE_DIR="/var/backups/postgres"
AMD=$(date "+%Y-%m-%d")
DIR="$BASE_DIR/$AMD"
mkdir-p $DIR
cd $DIR

# obtener la lista de bases de datos en sistema , excluir el tempate dbs
DBS=$($PSQL-l-t | egrep-v " plantilla[01]' | awk '{print $1}')

# primer volcado de toda la base de datos postgres, incluyendo pg_shadow etc.
$DUMPALL-D | gzip -9 > "$DIR/db.out.gz"

# siguiente volcado de globals (roles y los espacios de tablas) sólo
$DUMPALL-g | gzip -9 > "$DIR/globals.gz"

# ahora el bucle a través de cada individuo de la base de datos y copia de seguridad de los datos y el esquema por separado
para la base de datos en $DBS; ¿
SCHEMA=$DIR/$database.schema.gz
DATA=$DIR/$database.data.gz

 # exportar datos de postgres bases de datos a texto sin formato
 $PGDUMP-C-c-s $de la base de datos | gzip -9 > $ESQUEMA

 # volcado de datos
 $PGDUMP- $base de datos | gzip -9 > $DATA
hecho

# eliminar los archivos de copia de seguridad de más de 30 días
EDAD=$(encontrar $BASE_DIR-tipo d-mtime +30)
if [ -n "$EDAD" ] ; then
 echo eliminar antiguos archivos de copia de seguridad: $EDAD
 echo $EDAD | xargs rm-rfv
fi

8voto

Nick Anderson Puntos 459

pg_dump dbname | gzip > filename.gz

Recarga con

createdb dbname gunzip-c filename.gz | psql dbname

o

gato filename.gz | gunzip | psql dbname

El uso de split. La división comando permite dividir la salida en piezas que no son aceptables en el tamaño del sistema de archivos subyacente. Por ejemplo, para hacer trozos de 1 megabyte:

pg_dump dbname | split-b 1m - nombre de archivo

Recarga con

createdb dbname gato de nombre de archivo* | psql dbname

Su podría lanzar uno de esos en /etc/cron.por hora

Procedente de http://www.postgresql.org/docs/8.1/interactive/backup.html#BACKUP-DUMP-ALL

0voto

lee Puntos 580

Si quieres un racimo entero con carga de sistema mínimo de copia de seguridad, usted puede simplemente tar el directorio root de la agrupación de postgresql. por ejemplo:

echo "select pg_start_backup('full backup - `date`');" | psql
/usr/bin/rdiff-backup --force --remove-older-than 7D $BACKUP_TARGET
/usr/bin/rdiff-backup --include '/etc/postgresql' --include $PGDATA --exclude '/*' / $BACKUP_TARGET
/bin/tar -cjf /mnt/tmp/$SERVER_NAME.tbz2 $BACKUP_TARGET 2>&1
echo "select pg_stop_backup();" | psql

es la mayor parte de mi script de copia de seguridad.

0voto

l0ft13 Puntos 41

en caso de que alguien tiene copia de seguridad de su postgres en una máquina windows sin la ayuda de cygwin etc. tengo un archivo por lotes que funciona bastante bien.

Esto se copia de seguridad de las bases de datos en archivos individuales en su propio directorio cada día

set dtnm=%date:~-4,4%%date:~-7,2%%date:~0,2%
set bdir=D:\backup\%dtnm%
mkdir %bdir%

FOR /F "tokens=1,2 delims=|" %%a IN ('psql -l -t -A -U postgres') DO (
    IF %%b EQU postgres pg_dump -U postgres -f %bdir%\%%a.sql.gz -Z 9 -i %%a
)

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: