sql >> Base de Datos >  >> RDS >> PostgreSQL

Copia de seguridad y recuperación de PostgreSQL 9.0

En PostgreSQL, Backup &Recovery es muy fácil de usar en comparación con otras bases de datos. Muchos de ellos no estarán de acuerdo con esto, está bien, no entremos en debate. En cuanto a las copias de seguridad, PostgreSQL no admite RESPALDO INCREMENTAL, sin embargo, existen herramientas de respaldo muy consistentes y soluciones alternativas a nivel de sistema operativo para lograr este objetivo.

Mi presentación pictórica sobre PostgreSQL Backup and Recovery da una idea conceptual completa. Mirando el diagrama, puede ver qué copias de seguridad se pueden usar para restaurar o recuperar.

Copia de seguridad lógica

Utilidades pg_dump,pg_restore y pg_dumpall utilizadas para copias de seguridad lógicas. pg_dump y pg_restore ayudarán a realizar copias de seguridad para el nivel de base de datos, el nivel de esquema y el nivel de tabla. Pg_dumpall utilizado para el volcado de nivel de clúster.

Se admiten tres formatos con pg_dump, formato SQL simple, formato personalizado y formato Tar. Los volcados personalizados y en formato Tar son compatibles con la utilidad pg_restore, mientras que los volcados en formato SQL simple son compatibles con la utilidad psql para la restauración.

A continuación se muestran los ejemplos de cada nivel de copia de seguridad y los comandos de restauración relacionados.

Nota:establezca los valores predeterminados para PGDATABASE, PGUSER, PGPASSWORD y PGPORT en .bash_profile (Variables de entorno en Windows)

Volcado y restauración de formato SQL simple

$ pg_dump -U username -Fp dbname  >  filename
or
$ pg_dump -U username dbname -f filename
or
$ pg_dump -Fp -U username dbname -f filename

For restoring use psql command

$ psql -U username -f filename dbname
or
postgres=# i SQL-file-name //in psql terminal with i option

Formato personalizado

$ pg_dump -Fc dbname -f filename
$ pg_restore -Fc -U username -d dbname filename.dmp

Formato alquitrán

$ pg_dump -Ft dbname -f filename
$ pg_restore -U username -d dbname filename
or
$ cat tar-file.tar | psql -U username dbname

Nota:Los volcados de nivel de esquema y nivel de tablas se pueden realizar de la misma manera agregando opciones relacionadas.

Volcado de nivel de clúster:

$pg_dumpall -p portnumber > filename

For restoring use psql command

$ psql -f filename

Hay mejores formas de tomar vertederos y restaurar métodos. En particular, el libro “PostgreSQL 9 Administration Cookbook – 2010” de Simon Riggs y Hannu Krosing es una buena manera de comenzar con PostgreSQL Backup and Recovery publicado por www.2ndQuadrant.com.

Copia de seguridad física (Copia de seguridad del sistema de archivos)

Copia de seguridad en frío:

En la copia de seguridad en frío, es una copia de seguridad simple del sistema de archivos del directorio /data cuando la instancia de Postgres está inactiva, es decir, para lograr una copia de seguridad del directorio de datos autoconsistente, el servidor de la base de datos debe cerrarse antes de realizar la copia. PostgreSQL brinda flexibilidad para mantener pg_xlog y pg_tblspce en diferentes puntos de montaje a través de un enlace suave. Mientras copia el directorio /data, incluidos los datos del enlace suave, use el siguiente comando.

tar czf backup.tar.gz $PGDATA
or
cp -r $PGDATA /backup/
or
rsync -a $PGDATA /wherever/data

Copia de seguridad activa (copia de seguridad en línea):

En Hot Backup, el clúster estará en funcionamiento y la base de datos debería estar en modo de registro de archivo. Dos funciones del sistema notificarán a la instancia sobre el inicio y la detención del proceso Hot Backup (pg_start_backup(),pg_stop_backup()). Antes de continuar con la copia de seguridad en línea, analicemos el modo de registro de archivo de la base de datos, que es obligatorio para las copias de seguridad en línea.

Habilitar el archivado WAL:

Las próximas publicaciones mías informarán sobre PITR / Tunning WAL, etc., actualmente analizamos WAL Archiving. En el sistema de base de datos PostgreSQL, la base de datos real "escribe" en un archivo adicional llamado registro de escritura anticipada (WAL) en el disco. Contiene un registro de las escrituras realizadas en la base de datos del sistema. En el caso de Crash, la base de datos se puede reparar/recuperar a partir de estos registros.

Normalmente, el registro de escritura anticipada se registra a intervalos regulares (llamados puntos de control) comparado con la base de datos y luego se elimina porque ya no es necesario. También puede usar WAL como respaldo porque hay un registro de todas las escrituras realizadas en la base de datos.

Concepto de archivo WAL:

El registro de escritura anticipada se compone de 16 MB cada uno, que se denominan segmentos. Los WAL residen en el directorio pg_xlog y es el subdirectorio del 'directorio de datos'. Los nombres de los archivos se nombrarán numéricamente en orden ascendente por instancia de PostgreSQL. Para realizar una copia de seguridad basada en WAL, se necesita una copia de seguridad básica, es decir, una copia de seguridad completa del directorio de datos y los segmentos WAL entre la copia de seguridad base y la fecha actual.

La configuración del archivo de segmentos WAL se puede elegir configurando archive_command y archive_mode de los dos parámetros de configuración en postgresql.conf. Hacer que el clúster pase al modo de registro de archivo requiere REINICIAR.

archive_mode= on/off (boolean parameter)
archive_command = 'cp –i %p / Archive/Location/ f% '

Nota: %p para que el archivo se copie con la ruta utilizada como nombre de archivo y % f sin una entrada de directorio para el archivo de destino.

Para obtener más información sobre el proceso de archivador, consulte la publicación Memoria y procesos de PostgreSQL 9.0.

Copia de seguridad en línea:

Para realizar una copia de seguridad en línea:

Step 1 : Issue pg_start_backup('lable') in the psql terminal
postgres=# select pg_start_backup('fb');
Step 2 : OS level copy the $PGDATA directory to any Backup Location
$ cp -r $PGDATA /anylocation
Step 3 : Issue pg_stop_backup() in psql terminal.
postgres=# select pg_stop_backup();

Nota: No es necesario que estas dos funciones se ejecuten en la misma conexión de base de datos. El modo de copia de seguridad es global y persistente.

En PostgreSQL, no hay un catálogo para almacenar la hora de inicio y finalización de la copia de seguridad en línea. Sin embargo, cuando la copia de seguridad en línea está en proceso, se crean y eliminan algunos de los archivos.

pg_start_backup('label') y pg_stop_backup son las dos funciones del sistema para realizar la copia de seguridad en línea. Con pg_start_backup('label') se crea un archivo backup_label en el directorio $PGDATA y con pg_stop_backup() se crea un archivo 'wal-segement-number.backup' en $PGDATA/pg_xlog. Backup_label dará la hora de inicio y la ubicación del punto de control del segmento WAL, también notificará a la instancia de PostgreSQL que el clúster está en MODO DE RESPALDO. El archivo 'wal-segment-number.backup' en el directorio $PGDATA/pg_xlog describe la hora de inicio y finalización, la ubicación del punto de control con el número de segmento WAL.

Nota:Después de pg_stop_backup(), la instancia de PostgreSQL elimina el archivo backup_label.

Publique sus comentarios, sugerencias.