Còpies de seguretat de Postgres II

De Wikijoan
Dreceres ràpides: navegació, cerca

Backup i Recovery II. Backup a nivell de fitxers. File System Level Backup

Creació d'un cluster de base de dades

Ens basem en el capítol 24.2 de la documentació oficial de PostgreSQL: http://www.postgresql.org/docs/8.3/interactive/backup-file.html (i http://www.network-theory.co.uk/docs/postgresql/vol3/CreatingaDatabaseCluster.html)

El cluster de dades inicial que tenim en una instal.lació del Postgres està a:

./postgres -D /etc/postgresql/8.3/main
$ psql -h localhost -p 5432 -U postgres postgres

postgres# \d
empleat (tinc informació en el cluster antic)

Aquí podem veure els fitxer postgresql.conf, pg_hba.conf,... però poca cosa més.

Per inciciar el servidor de base de dades, normalment fem:

$ sudo /etc/init.d/postgresql-8.3 start

que això té una traducció en iniciar directament el dimoni postgres que està a /usr/lib/postgresql/8.3/bin:

./postgres -D /etc/postgresql/8.3/main

el primer que hem de fer és crear un Database Cluster (apartat 17.2), que significa inicialitzar en el disc un espai d'emmagatzematge.

El primer que he de fer és crear el directori /usr/local/pgsql/data, i per no tenir problemes, hem de fer que el propietari sigui l'usuari postgres hi pugui llegir i escriure.

$ sudo chown postgres /usr/local/pgsql -R

I ara opero amb l'usuari postgres, que és el que té permisos sobre la base de dades,

$ su postgres
$ cd /usr/lib/postgresql/8.3/bin
$ ./initdb -D /usr/local/pgsql/data

Los archivos de este cluster serán de propiedad del usuario «postgres».
Este usuario también debe ser quien ejecute el proceso servidor.

El cluster será inicializado con configuración local es_ES.UTF-8.
La codificación por omisión ha sido por lo tanto definida a UTF8.
La configuración de búsqueda en texto ha sido definida a «spanish».

corrigiendo permisos en el directorio existente /usr/local/pgsql/data ... hecho
creando subdirectorios ... hecho
seleccionando el valor para max_connections ... 100
seleccionando el valor para shared_buffers/max_fsm_pages ... 32MB/204800
creando archivos de configuración ... hecho
creando base de datos template1 en /usr/local/pgsql/data/base/1 ... hecho
inicializando pg_authid ... hecho
inicializando dependencias ... hecho
creando las vistas de sistema ... hecho
cargando las descripciones de los objetos del sistema ... hecho
creando conversiones ... hecho
creando directorios ... hecho
estableciendo privilegios en objetos predefinidos ... hecho
creando el esquema de información ... hecho
haciendo vacuum a la base de datos template1 ... hecho
copiando template1 a template0 ... hecho
copiando template1 a postgres ... hecho

ATENCIÓN: activando autentificación «trust» para conexiones locales.
Puede cambiar esto editando pg_hba.conf o usando el parámetro -A
la próxima vez que ejecute initdb.

Completado. Puede iniciar el servidor de bases de datos usando:

    ./postgres -D /usr/local/pgsql/data
o
    ./pg_ctl -D /usr/local/pgsql/data -l archivo_de_registro start

I miro quins són els fitxers i directoris que s'han creat:

$ ls -la /usr/local/pgsql/data
total 72
drwx------ 10 postgres root      4096 2009-04-27 14:19 .
drwxr-xr-x  3 postgres root      4096 2009-04-27 14:13 ..
drwx------  5 postgres postgres  4096 2009-04-27 14:19 base
drwx------  2 postgres postgres  4096 2009-04-27 14:19 global
drwx------  2 postgres postgres  4096 2009-04-27 14:19 pg_clog
-rw-------  1 postgres postgres  3429 2009-04-27 14:19 pg_hba.conf
-rw-------  1 postgres postgres  1460 2009-04-27 14:19 pg_ident.conf
drwx------  4 postgres postgres  4096 2009-04-27 14:19 pg_multixact
drwx------  2 postgres postgres  4096 2009-04-27 14:19 pg_subtrans
drwx------  2 postgres postgres  4096 2009-04-27 14:19 pg_tblspc
drwx------  2 postgres postgres  4096 2009-04-27 14:19 pg_twophase
-rw-------  1 postgres postgres     4 2009-04-27 14:19 PG_VERSION
drwx------  3 postgres postgres  4096 2009-04-27 14:19 pg_xlog
-rw-------  1 postgres postgres 16592 2009-04-27 14:19 postgresql.conf

Fixem-nos que s'ha creat el directori pg_xlog, que és el que contindrà els arxivats quan fem la pràctica de PITR.

Because the data directory contains all the data stored in the database, it is essential that it be secured from unauthorized access. initdb therefore revokes access permissions from everyone but the PostgreSQL user.

Anem a iniciar ara el Postgres des d'aquest directori, /usr/local/pgsql/data com a cluster de dades. Per fer-ho:

cd /usr/lib/postgresql/8.3/bin
$ ./postgres -D /usr/local/pgsql/data
$ psql -h localhost -p 5432 -U postgres postgres

postgres# \d
no hi ha res

Còpia del cluster de base de dades

$ tar -cf backup.tar /usr/local/pgsql/data

Es tracta de copiar tots els fitxers que pengen del directori /data. D'aquesta manera ens assegurem una còpia consistent d'una manera molt simple.

Té dos problemes:

1) només es poden fer còpies en fred. Hem d'aturar el servei

2) A partir de la còpia en fred, en el moment de restaurar, no val intentar fer un recovery només d'una base de dades o unes taules. No. S'han de restaurar TOTS els arxius. Per exemple, hem de copiar també els fitxers log de commit, situats a pg_clog. Un fitxer de taula només es pot utilitzar amb aquesta informació.


Així doncs els backups de Fitxers de Sistema només funcionen per fer un backup i recuperació complet de tot un cluster de base de dades, que ve representat per tot el que penja del directori /data.

En la secció 17.2 (http://www.postgresql.org/docs/8.3/interactive/creating-cluster.html) tenim informació sobre els clusters de bases de dades

En el capítol 53.1 (http://www.postgresql.org/docs/8.3/interactive/storage-file-layout.html) tenim informació de què conté els directoris que trobem dins de /data. Concretament, en el directori /data/base tenim un directori per cada base de dades (recordem que en el moment de la instal.lació tenim 3 bases de dades: Postgres, template0 i template1)

Resum:

Per fer una còpia sencera de la base de dades, tanquem el servei del Postgres, copiem tots els arxius de la carpeta /8.3/data, i ja està. Si tenim un desastre, aquest mètode ens proporciona una manera fàcil de restaurar la base de dades a l'estat en què teníem en el moment de fer la còpia. Això sí, no podem aplicar logs per situar-la en un estat posterior. Si la nostra organització no pot acceptar aquest nivell de seguretat, haurem de fer una còpia en mode Arxivat (terminologia Oracle), com s'explica en la secció 24.3 Continuous Archiving and Point-In-Time Recovery (PITR)



creat per Joan Quintana Compte, abril 2009

Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
IES Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines