Vous êtes sur la page 1sur 8

Respaldo y recuperacin de

bases de datos en
PostgreSQL.
Manual

Respaldo lgico de una base de datos
Dentro de psql (herramienta que permite manejar las bases de datos) como usuario postgres se
deben revisar las bases de datos existentes para saber de cual es necesario hacer respaldo. Para
accesar a psql desde una terminal primero es necesario entrar como usuario postgres de Linux y
despus accesar a psql:
$ su postgres (a continuacin pedir la contrasea del usuario postgres)
$ psql Una vez dentro del psql, para ver las bases de datos existentes se ejecuta el siguiente
comando: postgres=# \l Ya que se reviso que bases de datos se van a respaldar es necesario salir de psql
con el comando:
\q . Ahora desde usuario postgres de Linux se debe ejecutar el siguiente comando: $ pg_dump Fc
nombreBaseDatos > /rutaAlmacenamientoRespaldo/nombreRespaldo.bk O bien: $ pg_dump Fp
nombreBaseDatos > /rutaAlmacenamientoRespaldo/nombreRespaldo.sql Por ejemplo: $ pg_dump Fc
MiBaseDatos > /u01/postgres/9.0/respaldo/respaldo.bk O bien: $ pg_dump Fp MiBaseDatos >
/u01/postgres/9.0/respaldo /respaldo.sql La funcin pg_dump cuenta con los parmetros Ft, Fc y
Fp. El parmetro Ft indica que el
respaldo ser un archivo del tipo tar y este puede ser recuperado con la funcin pg_restore
desde usuario Linux. El parmetro Fc indica que el respaldo ser un archivo del tipo custom y permite
ponerle al nombre del respaldo cualquier tipo de extensin como respaldo.bk, respaldo.backup, etc.
y este puede ser recuperado con la funcin pg_restore desde usuario Linux.
El parmetro Fp indica que el archivo respaldo ser un archivo de texto plano o sql el cual se
recupera desde psql con el comando \i. Despus de haber seleccionado cualquiera de estos parmetros se
indica el nombre de la base de datos que se quiere respaldar seguida del smbolo > y la ruta de
almacenamiento del respaldo con el nombre del respaldo.
Nota: Es recomendable crear una carpeta para los respaldos que se vayan a crear.
Respaldo lgico de todas las bases de datos
Para hacer el respaldo de todas las bases de datos existentes se utiliza la funcin pg_dumpall. Para hacer uso
de esta funcin se debe ejecutar el siguiente comando desde usuario postgres de Linux: $ pg_dumpall
nombreBaseDatos > /rutaAlmacenamientoRespaldo/nombreRespaldo.out Por ejemplo:
$ pg_dumpall MiBaseDatos > /u01/postgres/9.0/respaldo/respaldo.out Esta funcin hace el respaldo de
todas las bases de datos una por una. Antes de considerar usar este tipo de respaldo es recomendable
hacer un respaldo de las bases de datos con la funcin pg_dump una a una, y posteriormente hacer el
uso del pg_dumpall.
Recuperacin de bases de datos a nivel lgico
Como se presento anteriormente se pueden hacer respaldos lgicos con las funciones pg_dump y
pg_dumpall. Antes de hacer la recuperacin de la base de datos es necesario crear la base de datos en psql
en la cual se cargara el respaldo. Una vez creada la base de datos, para cargar el respaldo de una base de
datos que fue hecho con la funcin pg_dump y que contaba con el parmetro Fc (custom) la recuperacin
se hace de la siguiente manera:
Desde el usuario postgres de Linux se debe ejecutar el siguiente comando:
$ pg_restore d nombreBaseDatos /rutaRespaldo/nombreRespaldo.bk
Por ejemplo:
$ pg_restore -d MiBaseDatos /etc/respaldos/respaldo.bk
Para cargar el respaldo de una base de datos que fue hecho con la funcin pg_dump y que
contaba con el parmetro Fp (texto plano) la recuperacin se hace de la siguiente manera: Se debe
accesar a psql y ejecutar el siguiente comando: Postgres=# \i /rutaRespaldo/nombreRespaldo.sql Por
ejemplo: Postgres=# \i /etc/respaldos/respaldo.sql Para cargar el respaldo de todas las bases de datos
hecho con la funcin pg_dumpall ejecutamos
el siguiente comando desde usuario Linux: $ psql f
/rutaRespaldo/nombreRespaldo.out postgres

Por ejemplo:
$ psql f /u01/postgres/9.0//respaldo/respaldo.out postgres
Respaldo fsico de bases de datos.
Respaldo a nivel de sistema de archivos (respaldo fsico en frio).
Una alternativa de respaldo es copiar directamente los archivos de la carpeta data que contiene
postgreSQL para almacenar los datos. Los datos que sean creados son almacenados en una carpeta la cual
puede ser /usr/local/postgresql/data o bien /var/lib/postgresql/data (generalmente es la segunda ruta).
Para hacer el respaldo de los datos contenidos en la carpeta data se deben ejecutar las siguientes
instrucciones desde una terminal:
1. Conectarse como usuario postgres de Linux.
a. su postgres
2. Parar el servidor de la base de datos
a. /etc/init.d/postgresql stop
3. Ejecutar el siguiente comando de empaquetado de la carpeta de postgresql
a. tar hcf /u01/postgres/respaldo/fsico/respaldo.tar /var/lib/postgresql/9.0/main
4. Una vez realizado el respaldo es importante iniciar el servidor de la base de datos
a. /etc/init.d/postgresql start
Existen dos puntos a tomar en cuenta:
1 El servidor de base de datos debe estar forzosamente apagado con el fin de obtener un respaldo
consistente. De igual manera, se debe apagar el servidor para hacer la recuperacin de los datos.
2 Este tipo de respaldo solo funciona para almacenar todo el contenido del cluster de las bases de
datos, es decir, no se puede recuperar solo una tabla o solo un esquema.
Respaldo del log de transacciones (respaldo fsico en caliente). El log de
transacciones contiene un write ahead log (WAL) dentro del directorio pg_xlog y sirve para recuperar la
base de datos en caso de que el servidor se caiga.
Para que este tipo de respaldo sea exitoso es necesario respaldar constantemente los archivos del WAL.
Creacin del archivo WAL
PostgreSQL produce una secuencia indefinida de registros WAL. Cada segmento del WAL pesa alrededor
de 16 MB y tienen nombres numricos. Cuando no se utiliza el archivado del WAL, el sistema crea pocos
segmentos y luego los recicla y los renombra. Cuando se hace el uso del


archivado del WAL necesitamos capturar el contenido de cada segmento una vez que estos estn llenos y
guardarlos antes de que sea reciclado y usado.
PostgreSQL permite asignar un comando para que se haga una copia completa de los segmentos y estos se
almacenan en otro lugar.
Para permitir el archivado del WAL se debe hacer una configuracin en el archivo
/etc/postgresql/postgres.conf:
1. En el apartado que dice W!L !HE!D LOG se debe poner en la lnea wal_level el parmetro
archive.
a. wal_level = archive
2. En la lnea archive_mode agregar on.
a. archive_mode = on
3. En la lnea archive_command se debe especificar el comando que realizara la copia.
a. archive_command = test ! f /u01/postgres/9.0/respaldo/%f && cp %p
/u01/postgres/9.0/respaldo/%f
Donde %p es la ruta de donde se copia el archivo y %f es el nombre de la copia del archivo (son
parmetros que son reemplazados automticamente por postgres).
Una vez que se ha agregado lo anterior, el archivado del WAL se har de forma automtica.
Respaldo fsico en caliente:
Para hacer el respaldo de los datos de las bases de datos se deben seguir las siguientes
instrucciones:
1. El almacenamiento del WAL debe estar activado y trabajando.

2. Conectarse como usuario postgres de Linux
a. su postgres

3. Entrar a psql
a. $ psql

4. Ejecutar el siguiente comando:
a. SELECT pg_statrt_backup(label)
Donde label ser para identificar el respaldo que se est realizando. Esta accin puede tomar
mucho tiempo en hacer el respaldo pero es normal que sea as. Una vez que se ha ejecutado lo anterior
el servidor de la base de datos estar en modo respaldo.
5. Si se quiere iniciar el respaldo los ms pronto posible se ejecuta la siguiente lnea:
a. SELECT pg_start_backup(label,true)
6. Posteriormente se debe salir de psql y hacer un respaldo usando la herramienta tar
a. /q (para salir de psql)
b. tar hcf /u01/postgres/respaldo/fsico/respaldo.tar /var/lib/postgresql/9.0/main

7. Una vez generado el archivo .tar es necesario entrar de nuevo a psql y ejecutar lo
siguiente:
a. SELECT pg_stop_backup();
Lo anterior finalizara el modo respaldo y marcara automticamente una marca para el siguiente
segmento del WAL.
8. El respaldo se ha completado
Recuperacin de bases de datos a nivel fsico
Para restaurar el cluster de las bases de datos se deben seguir los siguientes pasos:
1. Parar el servidor de bases de datos.
a. /etc/init.d/postgresql stop
1 Copiar la carpeta original de data en otro lugar en caso de que se requiera despus
(/var/lib/postgresql/9.0/main ). Si no existe suficiente espacio en disco para copiar toda la carpeta, es
necesario copiar al menos la carpeta de pg_xlog.
2 Se deben remover todos los archivos de la carpeta data.
3 Restaurar los archivos de la base de la carpeta data que fueron hechos con el respaldo (con la
herramienta tar). Estos deben ser restaurados por el usuario de la base de datos no por el root.
4 Remover cualquier archivo presente en la carpeta pg_xlog y agregar los que fueron hechos con el
respaldo de sistema de archivos.
5 Crear un recovery.conf en la carpeta original data (/var/lib/postgresql/9.0/main)(ver anexo para crear
el archivo recovery.conf).
6 Iniciar el servidor.
a. /etc/init.d/postgresql start
Este entrara en modo de recuperacin y leer el archivado del WAL . Una vez que ha sido
ledo el log de transacciones el archivo recovery.conf ser renombrado a recovery.done.
8. Revisar el contenido de la base para ver que la base de datos se restauro correctamente.
Anexo
Creacin del archivo recovery.conf.
Antes de ver la estructura del archivo es necesario saber que este archivo funcionara cuando se restaure
el servidor de bases de datos. Una vez usado se deber recrear otro archivo recovery.conf.
Un ejemplo de este archivo se encuentra en la carpeta share/recovery.conf.sample.
Parmetros del archivo recovery.conf:
G restore.command(String)
Este parmetro especifica el comando a ejecutar para recuperar los segmentos WAL. La opcin %f debe
sustituir el nombre del archivo a recuperar, y la opcin %p especifica la ruta a donde se copiara la
recuperacin dentro del servidor.
Si la accin de este archivo regresa como resultado un cero quiere decir que ha funcionado
correctamente. La lnea debe quedar de la siguiente manera:
restore_command = cp /mnt/server/archivedir/%f %p
G archive_cleanup_command(String) Este parametro especifica el comando que ser ejecutado cada
punto de restauracin. La funcin
de este parmetro es limpiar archivos viejos de WAL que ya no se necesitan en el servidor. La opcin %r es
sustituida por el nombre del ltimo archivo de punto de restauracin. La lnea debe quedar de la siguiente
manera: archive_cleanup_command = pg_archivecleanup /mnt/server/archivedir %r Si varios servidores
recuperan del mismo archive WAL, no es recomendable usar este parmetro.
Si el resultado de ejecucin de este parmetro no regresa cero, regresara una alerta.
G recovery_end_comand(String)
Este parmetro especifica un comando el cual ser ejecutado hasta que la recuperacin ha sido
terminada. El propsito de este parmetro es proveer un mecanismo para limpiar la siguiente
recuperacin. La opcin %r es sustituida por el nombre del ltimo archivo valido de restauracin
contenido. Por ejemplo:
archive_cleanup_command = pg_archivecleanup /mnt/server/archivedir %r
Parametros de Recovery target
G ]]E+]E_4C_]4_
4)O]W4)O]4COO
Este parametro especifica la marca de tiempo en la que la recuperacin inicio. Por default se recupera
a partir del final del log WAL.
G recovery_target_xid(String)
Este parmetro especifica la transaccin en la cual la recuperacin inicio. Por default son
recuperadas las que estn all final del log WAL.
G recovery_target_inclusive(Boolean)
Especifica si se detenemos justo despus del punto de recuperacin especificado (true), o antes del
punto de recuperacin (false). Por default asigna true.
G recovery_target_timeline(String)
Especifica la recuperacin en un punto de tiempo determinado. Por default recupera desde el punto en
que fue hecho el respaldo. Este parmetro es usado cuando se requiere una recuperacin compleja.
Parmetros Standby server
G standby_mode(Boolean)
Especifica cuando poner el servidor en espera. Si el parmetro es on el servidor no parara la
recuperacin cuando el final del WAL es alcanzado, intentara continuar con la restauracin buscando
nuevos segmentos del WAL usando restore_command o intentando conectar con el servidor con
primary_conninfo.
G primary_conninfo(String)
Especfica una conexion para ser usada por el modo espera del servidor para conectar con el primero. Esta
cadena esta en formato aceptado por la funcin PQconnectdb. Se especifica el host, el puerto, nombre de
usuario y contrasea.
G trigger_file(String)
Especifica el archivo con el trigger el cual especifica el final de la recuperacin. Si no se especifica el
trigger, el modo espera no sale de la recuperacin. Este parmetro no tiene efecto si el parmetro
standby:mode esta apagado (off).

Vous aimerez peut-être aussi