respaldoPostgres

Respaldo y recuperación de bases de datos en PostgreSQL. Manual Respaldo lógico de una base de datos Dentro de psql (h

Views 42 Downloads 73 File size 462KB

Report DMCA / Copyright

DOWNLOAD FILE

Citation preview

Respaldo y recuperación de bases de datos en PostgreSQL. Manual

Respaldo lógico 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 después accesar a psql: $ su postgres (a continuación pedirá la contraseña 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 función pg_dump cuenta con los parámetros –Ft, –Fc y –Fp. El parámetro –Ft indica que el

respaldo será un archivo del tipo “tar” y este puede ser recuperado con la función pg_restore desde usuario Linux. El parámetro –Fc indica que el respaldo será un archivo del tipo “custom” y permite ponerle al nombre del respaldo cualquier tipo de extensión como “respaldo.bk”, “respaldo.backup”, etc. y este puede ser recuperado con la función pg_restore desde usuario Linux.

El parámetro –Fp indica que el archivo respaldo será un archivo de texto plano o sql el cual se recupera desde psql con el comando \i. Después de haber seleccionado cualquiera de estos parámetros se indica el nombre de la base de datos que se quiere respaldar seguida del símbolo “>” 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 lógico de todas las bases de datos Para hacer el respaldo de todas las bases de datos existentes se utiliza la función pg_dumpall. Para hacer uso de esta función 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 función 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 función pg_dump una a una, y posteriormente

hacer el

uso del pg_dumpall.

Recuperación de bases de datos a nivel lógico Como se presento anteriormente se pueden hacer respaldos lógicos con las funciones pg_dump y pg_dumpall. Antes de hacer la recuperación 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 función pg_dump y que contaba con el parámetro –Fc (custom) la recuperación 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 función pg_dump y que contaba con el parámetro –Fp (texto plano) la recuperación 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 función 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 físico de bases de datos. Respaldo a nivel de sistema de archivos (respaldo físico 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.

2.

Parar el servidor de la base de datos a.

3.

/etc/init.d/postgresql stop

Ejecutar el siguiente comando de empaquetado de la carpeta de postgresql a.

4.

su postgres

tar –hcf /u01/postgres/respaldo/físico/respaldo.tar /var/lib/postgresql/9.0/main

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 recuperación 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 físico 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.

Creación del archivo WAL PostgreSQL produce una secuencia indefinida de registros WAL. Cada segmento del WAL pesa alrededor de 16 MB y tienen nombres numéricos. 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 están 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 configuración en el archivo /etc/postgresql/postgres.conf: 1. En el apartado que dice “W!L !HE!D LOG” se debe poner en la línea wal_level el parámetro archive. a. wal_level = archive 2. En la línea archive_mode agregar on. a. archive_mode = on 3. En la línea 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 parámetros que son reemplazados automáticamente por postgres). Una vez que se ha agregado lo anterior, el archivado del WAL se hará de forma automática. Respaldo físico 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 acción 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 más pronto posible se ejecuta la siguiente línea: 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/físico/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 automáticamente una marca para el siguiente segmento del WAL. 8. El respaldo se ha completado

Recuperación de bases de datos a nivel físico 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 después (/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 recuperación y leerá el archivado del WAL . Una vez que ha sido leído 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 Creación 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. Parámetros del archivo recovery.conf: restore.command(String) Este parámetro especifica el comando a ejecutar para recuperar los segmentos WAL. La opción %f debe sustituir el nombre del archivo a recuperar, y la opción %p especifica la ruta a donde se copiara la recuperación dentro del servidor. Si la acción de este archivo regresa como resultado un cero quiere decir que ha funcionado correctamente. La línea debe quedar de la siguiente manera: restore_command = ‘cp /mnt/server/archivedir/%f “%p”’ archive_cleanup_command(String) Este parametro especifica el comando que será ejecutado cada punto de restauración. La función de este parámetro es limpiar archivos viejos de WAL que ya no se necesitan en el servidor. La opción %r es sustituida por el nombre del último archivo de punto de restauración. La línea 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 parámetro.

Si el resultado de ejecución de este parámetro no regresa cero, regresara una alerta. recovery_end_comand(String) Este parámetro especifica un comando el cual será ejecutado hasta que la recuperación ha sido terminada. El propósito de este parámetro es proveer un mecanismo para limpiar la siguiente recuperación. La opción %r es sustituida por el nombre del último archivo valido de restauración contenido. Por ejemplo: archive_cleanup_command = ‘ pg_archivecleanup /mnt/server/archivedir %r ‘ Parametros de Recovery target  

Este parametro especifica la marca de tiempo en la que la recuperación inicio. Por default se recupera a partir del final del log WAL. recovery_target_xid(String) Este parámetro especifica la transacción en la cual la recuperación inicio. Por default son recuperadas las que están all final del log WAL. recovery_target_inclusive(Boolean) Especifica si se detenemos justo después del punto de recuperación especificado (true), o antes del punto de recuperación (false). Por default asigna true. recovery_target_timeline(String) Especifica la recuperación en un punto de tiempo determinado. Por default recupera desde el punto en que fue hecho el respaldo. Este parámetro es usado cuando se requiere una recuperación compleja.

Parámetros Standby server standby_mode(Boolean) Especifica cuando poner el servidor en espera. Si el parámetro es on el servidor no parara la recuperación cuando el final del WAL es alcanzado, intentara continuar con la restauración buscando nuevos segmentos del WAL usando restore_command o intentando conectar con el servidor con primary_conninfo. primary_conninfo(String) Específica una conexion para ser usada por el modo espera del servidor para conectar con el primero. Esta cadena esta en formato aceptado por la función PQconnectdb. Se especifica el host, el puerto, nombre de usuario y contraseña. trigger_file(String) Especifica el archivo con el trigger el cual especifica el final de la recuperación. Si no se especifica el trigger, el modo espera no sale de la recuperación. Este parámetro no tiene efecto si el parámetro standby:mode esta apagado (off).