Copia de seguridad y restauración

MySQLBeginner
Practicar Ahora

Introducción

En la administración de sistemas, la pérdida de datos no es una cuestión de «si» ocurrirá, sino de «cuándo». Ya sea por un fallo de hardware, errores de software o equivocaciones humanas, perder datos críticos puede ser catastrófico. Por eso, las copias de seguridad y la recuperación se encuentran entre las habilidades más importantes para trabajar con bases de datos.

En este laboratorio realizará una simulación completa de «recuperación ante desastres». Comenzará con una base de datos en buen estado, creará una copia de seguridad segura, la eliminará para simular un desastre y, después, la recuperará a partir de la copia de seguridad.

Aprenderá a:

  • Crear una copia de seguridad lógica con la utilidad mysqldump.
  • Simular un fallo catastrófico eliminando una base de datos.
  • Restaurar la base de datos a su estado original desde el archivo de copia de seguridad.

Una copia de seguridad lógica almacena sentencias SQL capaces de volver a crear el esquema y los datos. Se diferencia de una copia de seguridad física, que copia los archivos sin procesar de la base de datos. Existen ambos métodos, pero las copias de seguridad lógicas son más fáciles de leer y comprender para los principiantes.

Esta diferencia es importante porque cada tipo de copia de seguridad resuelve problemas ligeramente distintos. Las copias de seguridad lógicas son portátiles y legibles, mientras que las copias físicas suelen estar más cerca del motor de almacenamiento y de los mecanismos internos de recuperación.

Crear una copia de seguridad

Primero, compruebe que tenemos una base de datos que merece la pena conservar. Hemos preparado previamente una base de datos llamada app_db con algunos datos de usuarios.

Compruebe los datos actuales:

sudo mysql -e "SELECT * FROM app_db.users;"

Debería ver una lista de usuarios: Alice, Bob y Charlie.

Ahora creará una copia de seguridad lógica con la herramienta mysqldump. Básicamente, una copia de seguridad lógica exporta un archivo de texto que contiene todos los comandos SQL, como CREATE TABLE e INSERT, necesarios para reconstruir la base de datos desde cero.

Por lo tanto, el archivo de copia de seguridad no es un bloque binario misterioso. Normalmente es un script SQL que después puede ejecutarse en un servidor de bases de datos para reconstruir el esquema y los datos.

Ejecute el siguiente comando para guardar la base de datos en un archivo llamado backup.sql:

sudo mysqldump app_db > ~/project/backup.sql

Desglose del comando:

  • mysqldump: utilidad que se usa para exportar el contenido de la base de datos.
  • app_db: base de datos específica de la que desea crear una copia de seguridad.
  • >: operador de redirección de Linux, que envía la salida del comando a un archivo.
  • ~/project/backup.sql: ruta del archivo de destino.

Compruebe que se ha creado el archivo de copia de seguridad:

ls -l ~/project/backup.sql

También puede consultar su contenido para ver los comandos SQL:

head -n 20 ~/project/backup.sql

Simular una pérdida de datos

Ahora viene la parte más delicada. Para probar el plan de recuperación, necesitamos que ocurra un desastre. Simularemos la eliminación accidental de la base de datos de producción.

Advertencia: el comando siguiente elimina los datos de forma permanente. En un entorno de producción real, nunca lo ejecutaría a menos que tuviera la certeza absoluta de que desea destruir los datos.

Este paso destructivo se incluye porque las copias de seguridad solo son útiles si puede demostrar que la recuperación funciona después de una pérdida real. Una estrategia de copias de seguridad que nunca se prueba es solo una suposición.

Elimine la base de datos app_db:

sudo mysql -e "DROP DATABASE app_db;"

Confirme que el desastre ha ocurrido intentando acceder a la base de datos:

sudo mysql -e "USE app_db;"

Debería ver el error: ERROR 1049 (42000): Unknown database 'app_db'.

Esto confirma que la base de datos ha desaparecido. Si se tratara de un servidor de producción real sin una copia de seguridad, sería un día muy difícil.

Restaurar la base de datos

Afortunadamente, tenemos el archivo backup.sql. Puede utilizarlo para restaurar los datos.

Sin embargo, mysqldump, de forma predeterminada, solo exporta el contenido de la base de datos, no el comando para crear la propia base de datos. Como hemos eliminado por completo app_db, primero debemos crear una estructura vacía donde puedan almacenarse los datos.

Este detalle ayuda a los principiantes a comprender exactamente qué se capturó. Las copias de seguridad no son instantáneas mágicas de todo, a menos que el comando y las opciones elegidos incluyan explícitamente esas partes.

Cree la base de datos vacía:

sudo mysql -e "CREATE DATABASE app_db;"

Importe los datos desde el archivo de copia de seguridad:

sudo mysql app_db < ~/project/backup.sql

Desglose del comando de restauración:

  • sudo mysql: se conecta al servidor de bases de datos.
  • app_db: indica a MySQL qué base de datos debe utilizar como destino.
  • <: operador de redirección de entrada de Linux. Lee el contenido del archivo y lo envía al comando mysql como si usted lo estuviera escribiendo.

Si el comando se ejecuta de forma silenciosa, es decir, sin mostrar ninguna salida, normalmente significa que se ha ejecutado correctamente.

El proceso de restauración consiste esencialmente en enviar de nuevo las sentencias SQL al servidor. En otras palabras, la recuperación suele ser una reproducción controlada de las instrucciones almacenadas en la copia de seguridad lógica.

Verificar la recuperación de los datos

El último paso, y el más importante, de cualquier plan de copias de seguridad es la verificación. Que el comando de restauración no haya mostrado errores no significa que los datos sean correctos. Debemos comprobarlo.

Este es uno de los hábitos operativos más importantes en cualquier trabajo de sistemas: el éxito no consiste en que «el comando haya terminado», sino en que «el estado del sistema sea correcto después».

Vuelva a consultar la tabla users:

sudo mysql -e "SELECT * FROM app_db.users;"

Criterios de éxito:

Debería ver los datos originales:

+----+---------+---------------------+
| id | name    | email               |
+----+---------+---------------------+
|  1 | Alice   | alice@example.com   |
|  2 | Bob     | bob@example.com     |
|  3 | Charlie | charlie@example.com |
+----+---------+---------------------+

Si ve a Alice, Bob y Charlie, ¡ha recuperado correctamente los datos después del desastre!

Resumen

En este laboratorio ha completado correctamente un ciclo completo de recuperación ante desastres. Ha aprendido a:

  • Crear una copia de seguridad: exportar una base de datos a un archivo mediante mysqldump.
  • Destruir: simular un evento de pérdida de datos mediante DROP DATABASE.
  • Restaurar: importar un archivo de volcado SQL mediante la redirección de entrada <.
  • Verificar: confirmar la integridad de los datos recuperados.

Las copias de seguridad periódicas son su principal defensa frente a la pérdida de datos. En un entorno real, debería automatizar este proceso y probar las restauraciones con frecuencia.