Còpies de seguretat de Postgres II
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