Saltar a contenido

Copias de Seguridad y Restauración

Realiza las tareas propuestas.


1.Realiza una copia de seguridad lógica de tu base de datos completa, teniendo en cuenta los siguientes requisitos:

▪ La copia debe estar encriptada y comprimida.

▪ Debe realizarse en un conjunto de ficheros con un tamaño máximo de 75 MB.

▪ Programa la operación para que se repita cada día a una hora determinada.

Para hacer una copia de seguridad lógica de una base de datos Oracle completa, necesitamos tener en cuenta primero los permisos que tenemos en la base de datos. Los usuarios SYS y SYSTEM tienen los permisos necesarios para esto. También, podemos crear un nuevo usuario con el rol de DBA para realizar la copia de seguridad.

En mi caso voy a crear un usuario llamado COPIAS con el rol DBA para ejecutar la copia de seguridad. Esto lo haré mientras estoy conectado como SYSDBA. Para lograrlo, ejecutamos los siguientes comandos:

alter session set "_ORACLE_SCRIPT"=true;
CREATE USER COPIA IDENTIFIED BY usuario;
GRANT CONNECT, RESOURCE, DBA TO COPIA;
ALTER USER COPIA ACCOUNT UNLOCK;

Untitled

Una vez hecho esto, voy a crear un directorio en mi máquina donde va a guardarse la copia de seguridad.

mkdir /opt/oracle/copiasdir
sudo chown -R oracle:oinstall /opt/oracle/copiasdir/

Volvemos a SQLplus para crear en Oracle el directorio que acabamos de crear en nuestro sistema.

CREATE DIRECTORY copiasdir AS '/opt/oracle/copiasdir';

También será necesario que el usuario copia que acabamos de crear tenga una serie de permisos sobre este directorio.

GRANT READ,WRITE ON DIRECTORY copiasdir TO COPIA;
GRANT DATAPUMP_EXP_FULL_DATABASE TO COPIA;

Una vez hecho esto, podemos comenzar con la copia de seguridad, usando el siguiente comando.

expdp COPIA/usuario directory=copiasdir dumpfile=backup.dmp logfile=backup.log encryption_password=usuario compression=ALL full=y filesize=60M

O también podemos crear un fichero de parámetros para ejecutar la sentencia usando el parámetro PARFILE, pero en mi caso he optado por hacerlo de esta manera, comprobamos que la copia se ha realizado.

Untitled

Untitled

Comprobamos los ficheros creados.

Untitled

Hecho esto, vamos a programar la realización de este comando para que se ejecute todos los dias a las 03:00.

export EDITOR=nano
crontab -e
0 3 * * * $ORACLE_HOME/bin/expdp COPIA/usuario directory=copiasdir dumpfile=backup.dmp logfile=backup.log encryption_password=usuario compression=ALL full=y filesize=60M

El fichero quedaría de la siguiente manera.

Untitled

2. Restaura la copia de seguridad lógica creada en el punto anterior.

Para hacer la prueba y que sea mas realista, voy a eleiminar la base de datos y a reinstalarla para comprobar que funciona. Para ello:

Iniciamos la base de datos.

startup

La desmontamos.

shu immediate

Ahora montamos de nuevo la base de datos en modo montaje y restringido y eliminamos la base de datos.

startup mount exclusive restrict;
drop database;

A continuación haré algunas pruebas para comprobar que efectivamente la base de datos se ha eliminado:

Untitled

Como vemos, la base de datos está inoperativa y es necesario reconfigurarla, una vez hecho eso podemos pasar a restaurar los datos de la copia de seguridad.

impdp SYSTEM/usuario DIRECTORY=copiasdir DUMPFILE=backup.dmp LOGFILE=import.log FULL=Y ENCRYPTION_PASSWORD=usuario

Untitled

Habrá objetos que no se restauren, ya que no han sido eliminados de la base de datos.

Untitled

Una vez terminado el proceso, voy a comprobar que la base de datos ha sido restaurada conectandome al usuario SCOTT y comprobando las tablas.

Untitled

Podemos comprobar que la información ha sido restaurada.

3. Pon tu base de datos en modo ArchiveLog y realiza con RMAN una copia de seguridad física en caliente.

Para poner la base de datos en modo ArchiveLog conectaremos a la base de datos como SYSDBA y ejecutaremos lo siguiente:

shutdown immediate;
startup mount;
alter database archivelog;
alter database open;

Untitled

SHUTDOWN IMMEDIATE: Esta instrucción detiene la base de datos Oracle de manera inmediata.

STARTUP MOUNT: Esta instrucción inicia la base de datos Oraclce y la pone en modo de montaje.

ALTER DATABASE ARCHIVELOG: Esta instrucción activa el modo ARCHIVELOG en la base de datos.

ALTER DATABASE OPEN: Esta instrucción abre la base de datos Oracle para conexiones de usuario.

Podemos comprobar que la base de datos está en ArchiveLog con la siguiente sentencia:

SQL> SELECT log_mode FROM V$DATABASE;

Untitled

Para hacer la prueba crearé un nuevo usuario con los privilegios adecuados.

alter session set "_ORACLE_SCRIPT"=true;
CREATE USER RMAN IDENTIFIED BY usuario;
GRANT CONNECT, RESOURCE TO RMAN;
GRANT RECOVERY_CATALOG_OWNER TO RMAN;

También será necesario crear un tablespace para este usuario.

CREATE TABLESPACE TS_RMAN_DATA DATAFILE '/opt/oracle/oradata/ORCLCDB/ts_rman_data.dbf' SIZE 500M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;
ALTER USER RMAN DEFAULT TABLESPACE TS_RMAN_DATA QUOTA UNLIMITED ON TS_RMAN_DATA;

Untitled

Lo siguiente será configurar rman desde la terminal, para ello ejecutamos el siguiente comando.

rman

Untitled

Nos conectamos al usuario que hemos creado anteriormente.

connect CATALOG RMAN/usuario;

Untitled

Creamos un catálogo partiendo del tablespace anteriormente creado.

CREATE CATALOG TABLESPACE TS_RMAN_DATA;

Untitled

Después de esto, vamos a conectar RMAN al catálogo desde la terminal

rman target =/ catalog RMAN/usuario

Untitled

Registramos nuestra base de datos en el catálogo de RMAN y posteriormente realizamos la copia en caliente.

REGISTER DATABASE;
BACKUP DATABASE PLUS ARCHIVELOG;

Untitled

Con este comando, realizamos una copia de seguridad de la base de datos completa incluyendo los registros de ArchiveLog. Podemos verificar que la copia de seguridad se ha realizado correctamente ejecutando el siguiente comando.

restore database preview;

Untitled

Esto nos sirve para ver que se restaurará en la base de datos a partir de la copia de seguridad creada. Con esto, ya tenemos la base de datos en archivelog y hemos realizado la copia de seguridad.

4. Borra un fichero de datos de un tablespace e intenta recuperar la instancia de la base de datos a partir de la copia de seguridad creada en el punto anterior.

Para hacer este ejercicio, he decidido borrar el fichero correspondiente al tablespace USERS, lo copiaré en otra ruta y posteriormente lo eliminaré para que Oracle no lo encuentre y me salte el error correspondiente.

SELECT FILE_NAME FROM DBA_DATA_FILES;

Untitled

Procedo a borrarlo.

Untitled

Comprobamos que Oracle no encuentra el fichero.

select * from SCOTT.dept;

Untitled

El fichero ha sido eliminado y no podemos acceder a los datos, vamos a conectarnos a RMAN para restaurar este fichero a partir de la copia de seguridad antes creada.

rman target =/ catalog RMAN/usuario
list backup of datafile '/opt/oracle/oradata/ORCLCDB/users01.dbf';

Untitled

Como podemos comprobar, el fichero eliminado se encuentra en nuestra copia de seguridad, vamos a restaurarlo.

SQL "ALTER TABLESPACE USERS OFFLINE IMMEDIATE";
RESTORE TABLESPACE USERS;
RECOVER TABLESPACE USERS;
SQL "ALTER TABLESPACE USERS ONLINE";

Untitled

Como podemos comprobar, antes de restaurarlo hemos desactivado el tablespace y por último hemos vuelto a activarlo después de la restauración, ahora podemos comprobar que los datos se han restaurado correctamente. Primero miraré en el directorio correspondiente donde se guardan los ficheros .dbf

Untitled

El fichero se encuentra en su localización, ahora compruebo que puedo acceder a los datos desde SQL*Plus

Untitled

Como vemos, la restauración se ha completado correctamente.

5. Borra un fichero de control e intenta recuperar la base de datos apartir de la copia de seguridad creada en el punto anterior.

Lo primero que haremos, será comprobar que existe en nuestra copia de seguridad este fichero de control que vamos a eliminar. Para ello, con la base de datos montada, nos conectamos a RMAN y ejecutamos el siguiento comando.

rman target =/ catalog RMAN/usuario
list backup of controlfile;

Untitled

Podemos comprobar que existen dos copias de seguridad que encuentran este fichero, en mi caso restauraré la última, que se encuentra en /opt/oracle/product/19c/dbhome_1/dbs/c-2928957303-20240309-01. Es importante que nos quedemos con esta ruta, ya que al eliminar el fichero de control, la base de datos no podrá ser montada correctamente y RMAN no va a poder acceder al catálogo que creamos anteriormente, por esto debemos especificarle la ruta completa al fichero para que restaure la copia.

Eliminaremos un fichero de control.

Untitled

En mi caso, moveré el fichero de control conrtrol01.ctl a otra ubicación del sistema, para que Oracle no pueda encontrarlo y provocar el fallo, luego lo restauraremos con RMAN. Una vez movido el fichero, debemos reiniciar la instancia de Oracle especificando que no se monte.

shutdown abort;
startup nomount;

Untitled

Podemos comprobar que la base de datos no responde, ya que no se encuentra montada.

Untitled

Vamos a acceder de nuevo a RMAN y comprobar que ahora no se puede conectar al catálogo.

Untitled

Para poder restaurar la copia nos conectaremos a RMAN de forma normal y ejecutaremos el siguiente comando, empleando la ruta al fichero de backup que vimos anteriormente.

rman target =/
restore controlfile from '/opt/oracle/product/19c/dbhome_1/dbs/c-2928957303-20240309-01';

Untitled

Hecho esto vamos a recuperar la base de datos, la volveremos a montar, haremos un recover y la abriremos reseteando los logs.

alter database mount;
recover database;
alter database open resetlogs;

Untitled

Hecho esto, tenemos nuestra base de datos recuperada usando la copia de seguridad realizada anteriormente con RMAN.

6. Documenta el empleo de las herramientas de copia de seguridad y restauración de Postgres.

En el trabajo anterior relacionado con el movimiento de datos usé la herramienta pg_dump y pg_dumpall por lo que serán herramientas que evitaré usar.

En Postgre, tengo las siguientes bases de datos.

Untitled

Y los siguientes usuarios.

Untitled

Para crear la copia en esta ocasión, voy a utilizar el siguiente comando. Anteriormente tenemos que haber creado el directorio backup.

pg_basebackup -D /var/lib/postgresql/backup

Untitled

Para restaurarla sí será necesario parar el servicio, ya que restauraremos copiando los ficheros.

Untitled

Borraremos todos los ficheros para asegurarnos que es una copia de seguridad completa:

rm -fr /var/lib/postgresql/15/main/*

Untitled

Obviamente la base de datos no va a funcionar.

Untitled

Posteriormente copiaremos los ficheros del directorio en el cual hemos hecho el backup y daremos los permisos correspondientes, cambiando el propietario si es necesario también:

cp -r * ../15/main/
chown -R postgres:postgres ../15/main/
chmod -R 0700 ../15/main

Comprobamos que tenemos los ficheros y arrancamos el servicio.

Untitled

Untitled

Una vez restaurada la copia de seguridad, accederé a la base de datos y consultaré registros en la base de datos para comprobar que todo ha sido recuperado.

Untitled

Podemos loguearnos como cualquier usuario y comprobar que todo sigue funcionando.

Untitled

Esta es una manera diferente pero efectiva de realizar una copia de seguridad de nuestra base de datos. Destacaría: - El formato de salida, pudiendo usar tar. - Comprimir el tar anterior con gzip. - Regular el nivel de compresión. - Activar el modo verboso.

También podemos hacer que esta operación se realice periódicamente haciendo uso de la herramienta cron como vimos anteriormente.

crontab -e

Untitled

Con esto, conseguimos que se realice una copia diariamente a las 03:00

7. Documenta el empleo de las herramientas de copia de seguridad y restauración de MySQL.

MySQL nos ofrece varias herramientas que nos ayudan a realizar copias de seguridad sobre nuestra base de datos, algunas de ellas son las siguientes:

  • Mysqldump: Es una herramienta que permite crear copias de seguridad de bases de datos MySQL. Con mysqldump es posible crear copias de seguridad de una base de datos completa, de una tabla específica o de varias tablas. Las copias de seguridad creadas con mysqldump son archivos de texto plano que contienen las instrucciones SQL necesarias para recrear la estructura de la base de datos y los datos almacenados en ella.

  • MySQL Enterprise Backup: Es una herramienta de copia de seguridad y restauración que forma parte de MySQL Enterprise Edition. MySQL Enterprise Backup es capaz de realizar copias de seguridad en caliente de bases de datos MySQL utilizando el mecanismo de snapshots. Además, permite realizar copias de seguridad incrementales y restauraciones punto en el tiempo.

  • Percona XtraBackup: Es una herramienta de copia de seguridad y restauración que permite realizar copias de seguridad en caliente de bases de datos MySQL y Percona Server. Percona XtraBackup utiliza el mecanismo de snapshots para realizar copias de seguridad en caliente, lo que permite minimizar el tiempo de inactividad de la base de datos durante el proceso de copia de seguridad. Es una herramienta algo antigua.

Voy a usar mysqldump para relizar las copias de seguridad, para realizarla podemos ejecutar el siguiente comando:

mysqldump -u root -p --all-databases > backup/backup_mariadb.sql

Untitled

Con este comando creamos un fichero .sql que contiene la información sobre la base de datos, vamos a mirar el contenido para comprobar que se ha creado.

cat backup/backup_mariadb.sql | less

Untitled

Para comprobar que la restauración de la base de datos se completa, voy a eliminar al usuario scott junto con su base de datos.

DROP USER 'scott'@'localhost';
drop database scott;

Untitled

Comprobamos que se han eliminado.

Untitled

Hecho esto, vamos a restaurar la base de datos usando la copia de seguridad creada anteriormente.

mysql -u root -p < backup/backup_mariadb.sql

Untitled

Ahora, vamos a comprobar que se ha restaurado.

show databases;
select user, host from mysql.user;

Untitled

Ahora vamos a entrar a la base de datos de scott para corrobar que las tablas se han recuperado.

Untitled

Podemos comprobar que todo se ha restaurado correctamente. También podemos automatizar esta sentencia con cron, para que se ejecute una copia de seguridad cada día a las 03:00 por ejemplo.

crontab -e

Untitled

8. Documenta el empleo de las herramientas de copia de seguridad y restauración de MongoDB.

Voy a hablar sobre algunas herramientas que ofrece MongoDB que podemos usar para realizar copias de seguridad.

  • Mongodump: Esta herramienta se utiliza para realizar copias de seguridad de bases de datos y colecciones individuales en MongoDB. Es una herramienta de línea de comandos que seejecuta en el servidor de MongoDB y crea copias de seguridad en formato BSON.
  • Mongorestore: Es una herramienta para restaurar las copias de seguridad creadas con mongodump. Esta herramienta puede restaurar bases de datos o colecciones individuales.
  • MongoDB Cloud Backup: MongoDB ofrece una solución de backup en la nube que se puede usar con su servicio de nube Atlas. MongoDB Cloud Backup realiza backups automatizados, incrementales y completos, y proporciona opciones de restauración granulares. También proporciona la posibilidad de encriptar las copias de seguridad.
  • MongoDB Ops Manager: Esta es una solución de gestión y monitorización de MongoDB que también ofrece capacidades de backup y restauración. MongoDB Ops Manager puede ser utilizado para programar y automatizar backups, así como para realizar restauraciones granulares y recuperar datos en caso de desastres.
  • MongoDB Backup Service for Cloud Manager: Esta es otra solución de backup ofrecida por MongoDB, que es específica para Cloud Manager. Esta herramienta permite realizar backups programados y automatizados.
  • MMS Backup: Es una solución de copia de seguridad y recuperación de datos en la nube que se integra con MongoDB Cloud Manager y MongoDB Ops Manager.

Yo voy a usar mongodump para crear la copia de seguridad, antes de hacerla voy a comprobar las bases de datos que tengo en Mongo.

show databases;

Untitled

Voy a realizar una copia de seguridad sobre la base de datos practica_auditoria.

Untitled

mongodump -u admin --db practica_auditoria --authenticationDatabase admin --out backups

Untitled

Este comando nos ha creado un directorio backups, dentro de este encontraremos los datos de la copia de seguridad.

Untitled

Podemos mirar el contenido de estos ficheros.

bsondump practica_auditoria/asignaturas.bson | jq

Untitled

Una vez hemos comprobado que la copia está hecha, voy a eliminar esta base de datos junto con sus colecciones.

show dbs;
use practica_auditoria
show collections;
db.asignaturas.drop();
db.profesores.drop();
db.dropDatabase();

Untitled

Hecho esto, voy a restaurar la copia de seguridad creada anteriormente.

mongorestore -u admin --db practica_auditoria --authenticationDatabase admin practica_auditoria

Untitled

Podemos comprobar que la base de datos se ha restaurado correctamente. Para corroborarlo voy a entrar en Mongo.

Untitled

Vemos que la base de datos se ha restaurado, ahora voy a ver los datos de esta.

Untitled

Podemos apreciar que la restauración de datos se ha realizado correctamente.

Al igual que con las otras herramientas vistas anteriormente, podemos automatizar este proceso para realizar una copia diariamente usando cron.

crontab -e

Untitled

CONCLUSIÓN

Como hemos podido comprobar, existen diferentes herramientas ofrecidas por los SGBDs que nos permiten realizar copiar de seguridad avanzadas sobre nuestras instancias, realizar una automatización de estas es algo sencillo en Linux utilizando la herramienta cron.