Está en la página 1de 5

[CAPITULO 11 COOKBOOK]

https://community.nasscom.in/communities/it-services/the-7-rules-of-it-disaster-
recovery-strengthen-disaster-preparedness.html
https://blog.storagecraft.com/disaster-recovery-metrics-use/

El porque del backup es para tener un resguardo de la informacion que manejan los
sistemas de algun negocio.
Ese resguardo se utilizaria en caso de que ocurra algun inconveniente, alguna
perdida de informacion.

RTO es una metrica de una medida de en cuantas horas de tiempo desde que ocurrio un
desastre nos va a llevar hasta poner nuevamente en linea el sistema.
RPO es una medida de cuanto es el maximo de datos que el sistema puede perder.

Palnificaciones:
https://community.nasscom.in/communities/it-services/the-7-rules-of-it-disaster-
recovery-strengthen-disaster-preparedness.html
Metricas:
https://blog.storagecraft.com/disaster-recovery-metrics-use/

Copiamos el archivo rrhh_ok.dmp a la carpeta /home/postgres con el WinScp


Revisamos que bases de datos tenemos
psql -l
Revisamos que el archivo rrhh_ok.dmp se encuentre en la carpeta
ls -l

Podemos hacer backup fisicos o logicos. Para hacer backups logicos usamos el
pg_dump
Vemos la ayuda con
pg_dump --help
Es una herramienta presente en el binario por lo que los que no tienen seteado el
PATH para ejecutarla pueden ir al bin de postgres
pg_dump [OPTION]... [DBNAME]
Pg_dump es solo para bases de datos y pg_dumpall permite hacer backup de los
usuarios, los esquemas, triggers, etc.
pg_dumpall

La herramienta para restaurar datos que usamos es pg_restore


Vemos la ayuda con
pg_restore --help

Ahora vamos a restaurar la base de datos rrhh.


Primero la creamos vacía con el siguiente comando
psql -c "create database rrhh;"
Revisamos con
psql -l
Ahora tenemos que traer los datos del archivo rrhh_ok.dmp a la base de datos rrhh.
Utilizamos la herramienta pg_restore
pg_restore -v -d rrhh /home/postgres/rrhh_ok.dmp
El -v da un detallado del proceso de restauración.

Ahora nos conectamos a la bd rrhh


psql rrhh
Y hacemos selects para comprobar que efectivamente fue restaurada
select * from paises;
select * from departamentos;
select * from empleados;
Salimos del psql
\q

Vamos a verificar los usuarios que tenemos creados


psql
\du
\q

Ahora vamos a hacer backups logicos en postgres


pg_dump rrhh -v -f /home/postgres/rrhh_1.sql
Con el -v va el detallado y el -f el nombre del archivo en el que vamos a guardar
Esto hace un archivo plano
Si ahora vemos el listado de archivo en la carpeta
ls -l
Vemos que efectivamente se creó el archivo rrhh_1.sql
Si leemos el archivo
vi rrhh_1.sql
Son todas sentencias sql
Salimos con
:q

El segundo ejemplo sería hacer un backup pero usando -c que incluye las sentencias
de create database.
pg_dump rrhh -v -C -f /home/postgres/rrhh_2.sql
Ahora comprobamos
ls -l
Si vemos el vi del archivo
vi rrhh_2.sql
Agrega el crear la base de datos, en base a una planilla, que tipo de encoding va a
usar.
Salgo
:q

Hay una opcion de pg_dump que es la opcion de customizada que permite generar un
archivo que permite restaurar con pg_restore (-F -c)
pg_dump rrhh -Fc -v -C -f /home/postgres/rrhh_3.dmp
Si hacemos un vi
vi rrhh_3.dmp
Vemos que es distinto el formato, es uno propio, y usualmente se le coloca de
formato .dmp

Ahora abrimos el segundo backup que hicimos


vi rrhh_2.sql
Y reemplazamos (con insert) en CREATE DATABASE rrhh por rrhh2, tambien en el ALTER
DATABASE, y en \connect
Ahora grabamos con Esc, :wq

Si comprobamos en el backup rrhh_1.sql lo primero que hacia era generar las tablas,
al usarlo nosotros definiamos en que database se realizaba.

Restauracion de un bkp plano:


Ahora creamos la database
psql -c "create database restaura1;"
Con el siguiente comando veo que se creo
psql -l
Ahora restauro backups logicos con
psql restaura1 -f /home/postgres/rrhh_1.sql
Ahora nos conectamos con
psql restaura1
Y hacemos un select
select * from localidades;
Vemos que se restauró
Salimos con
\q

Restauracion con archivo plano con create:


No hace falta crear antes la base de datos
Salimos de psql
\q
Directamente ejecutamos
psql -f /home/postgres/rrhh_2.sql
Si hago el listado de bd veo que efectivamente se creó
psql -l
Si me conecto a la base de datos tambien puedo comprobar que se restauraron los
datos

Reutaracion con pg_restore, archivo customizado dmp:


[Es lo que hicimos al principio de clase]
Tenemos que crear primero la bd vacía
psql -c "create database restaura2;"
Ahora usamos el pg_restore
pg_restore -v -d restaura2 /home/postgres/rrhh_3.dmp

La idea es que los backup sean automatizados, que no necesariamente estemos frente
a la consola para realizar estos trabajos.
Dejar tareas programadas.

Qué es tambien importante backupear? LOS USUARIOS, sus permisos.

Vemos los usuarios al conectarnos al psql


psql
Con
\du
Para backupear usuarios usamos la herramienta pg_dumpall
pg_dumpall -v -r -f /home/postgres/usuarios.sql
Si vemos que tiene el archivo
cat /home/postgres/usuarios.sql
Vemos que se crean los usuarios con sus configuraciones y passwords ENCRIPTADAS

El otro pg_dumpall importante que tenemos que ver es el de objetos globales, que
son todos aquellos objetos que no son la base de datos.
pg_dumpall -v -g -f /home/postgres/globales.sql
Vemos que tiene el archivo
cat /home/postgres/globales.sql
Es todo lo que son Roles, granteo a usuarios y ademas encodings, tablespaces.

Hay una opcion que es por ejemplo si solo queremos definiciones sin datos, esquemas
El esquema por defecto es public, estan todas las tablas, las funciones, los
triggers.
Y una bd puede tener n esquemas. Y que cada uno atienda un sw en particular.
pg_dumpall -v -s -f /home/postgres/esquemas.sql
Si no pongo -d y la database especifica, me va a hacer de todos los esquemas y
todas las db.
Vemos su contenido con
cat /home/postgres/esquemas.sql
Es solo le de las definiciones, sin datos
Son fotos de este momento
Podemos backupear por desarrollo, testing, desastres, etc.

Sacar datos de tablas usamos el comando copy


Nos conectamos a la base recursos humanos
psql rrhh
Vamos a ver que tiene la tabla paises
select * from paises;
Vemos que tiene la tabla departamentos
select * from departamentos;
Necesito llevarme el listado de departamentos por ejemplo utilizamos un copy
copy departamentos to '/home/postgres/deptos.txt';
Ahora hacemos un copy con delimitador
copy departamentos to '/home/postgres/deptos2.csv' with delimiter ',';
Salimos de psql
\q
Y hacemos una lista de archivos
ls -l
Si vemos el conectido de deptos.txt
vi deptos.txt
Tiene el contenido de las tablas sin separacion entre columnas solo espaciado
Si vemos el archivo deptos2.csv
vi deptos2.csv
Vemos que se encuentran las filas separadas por comas, no encolumnadas.

Otra cosa que nos pueden pedir es hacer una copia de la tabla pero ahi dentro del
sql
Nos conectamos a la base rrhh
psql rrhh
Vemos los datos de la tabla paises
select * from paises;
Entonces creamos la tabla y la llenamos con los datos de paises
create table paises2 as select * from paises;
Ahora revisamos
select * from paises2;

Tambien nos pueden pedir que hagamos una tabla solo con ciertos registros
Creamos la tabla y la llenamos con los registros que cumplan la condicion
create table programadores as (select * from empleados where "TRABAJO_ID"=
'IT_PROG');

Una estrategia de backup aceptablee es hacer backup fisicos


Si tenemos una base de datos nosotros sabemos que se guarda como un archivo en
disco
En la carpeta data ahi es donde se crea todo el esquema de los archivos fisicos del
servidor
cd /usr/local/pgsql/data
Listamos los archivos
ls -l
Vemos la carpeta base, ahi estan los archivos fisicos del servidor, con un object
id.
La carpeta data tiene todos los archivos conf
Y ademas la carpeta pg_wal
cd pg_wal
ls -l -h
Estan las tablas donde se guardan las transacciones cada 16 megas
Entonces la base de datos esta conformada por todos los archivos de la carpeta base
y todas las transacciones confirmadas que se acaban de hacer en memoria en estos
archivos.
Cada cierto tiempo se hace un checkpoint y se pasa las transacciones de esas tablas
a disco, a la carpeta base.
Para tener una copia debemos hacer un checkpoint y copiar la carpeta data

Primero hacemos un checkpoint usando startbackup


psql -Upostgres -c "select pg_start_backup('${fecha}');"
Y ahora copio la carpeta data a otro lugar fisico
cd /usr/local/pgsql/data/
tar -czvf
/home/postgres/data_15_05_20.tar.gz????????????????????????????????????
Despues le digo bueno continua
psql -c "select pg_stop_backup();"
Y ahi me libera y sigue generando wal

Hay otra herramienta que se usa


pg_basebackup --help
Este hace el start, el empaquedado y el estop backup todo de una sola vez

Voy a cd home postgres


cd /home/postgres/
Y quiero que todas las siguientes bases de datos se vayan a data2
mkdir data2
Voy al pgAdmin
Databases-> Properties->Definition -> Tablespace
Quiero crear otro dataspace
Tablespaces -> create nuevo -> general + definition
Y creo nueva bd y guardo en definition tablespace data2

También podría gustarte