domingo, 22 de enero de 2017

Backup físico en MySQL de bases de datos con motor de almacenamiento InnoDB

En ocasiones queremos migrar una base de datos MySQL de un servidor a otro de la manera más rápida posible. De las múltiples opciones de copia de seguridad existentes la copia física estará siempre entre las más rápidas. Sin embargo dependiendo del motor de almacenamiento tendremos que aplicar una técnica u otra, en este caso vamos a ver cómo realizar una copia física de base de datos sobre el motor de almacenamiento InnoDB que es uno de los más comunes entre los que cumplen las características ACID de MySQL


Comenzando...

Para comenzar hemos creado una instalación de MySQL 5.7.17. en una máquina virtual de Ubuntu 16.04 Desktop de nombre "Antares", en esa instalación hemos creado una pequeña base de datos denominada portable que nos servirá para comprobar que la migración se ha realizado correctamente.

Imagen 1. Estado de la base de datos original (máquina Antares)

Apagado lento del servidor

En primer lugar, se hace necesario pasar el servidor para realizar una copia de archivos en un estado seguro, para asegurarnos que la parada el servidor se hace de la mejor manera posible debemos consultar el valor de la variable de servidor innodb_fast_shutdown que especifica la manera en la que se va a realizar la parada del sistema:

  • Si el valor es 0 InnoDB realiza un apagado lento limpiando y fusionando el buffer de cambios antes de apagar.
  • Si el valor es 1(por defecto) el servidor se apaga pero no realiza esas operaciones (proceso conocido como apagado rápido)
  • Si el valor es 2 InnoDB aplica sus logs y se apaga en frío de manera similar a una caída de la aplicación. No se perderán las transacciones aplicadas pero las operaciones de recuperación al iniciar su servidor pueden tomarse su tiempo.

En nuestro caso cambiamos el valor a 0.



Imagen 2. Cambiando el valor de innodb_fast_shutdown

A continuación nos aseguramos que conocemos la ruta del directorio de datos de MySQL (habitualmente /var/lib/mysql), en todo caso lo podemos consultar en la variable de servidor datadir.



Una vez que estamos seguros de la ubicación de los datos detenemos el servidor.


Haciendo el backup de los archivos

Ahora simplemente tenemos que hacer una copia de los archivos originales, para ello basta mirar el manual de MySQL que indica para estos casos cuáles son los archivos importantes:


  • Archivos de datos InnoDB (archivos ibdata y .ibd).
  • Archivos .frm correspondientes a las tablas InnoDB.
  • Archivos de registro Innodb (archivos ib_logfine).
  • Archivo de configuración my.cnf. Muy útil en el caso de que el servidor destino tenga una configuración distinta.
Imagen 3. Generando un archivo comprimido con los datos necesarios para el backup


Restaurando en el servidor de destino


A continuación y con el archivo de backup listo nos movemos a nuestro servidor de destino (hostname Andromeda) que tiene una configuración similar al original. En este caso trabajaremos a partir de una instalación limpia en otra máquina:

Imagen 4. Estado de la base de datos MySQL en el equipo destino antes de restaurar

En primer lugar y para evitar problemas realizamos un apagado lento del servidor, tal y como hicimos en el servidor original. Esto realmente puede no ser necesario pero uno ha visto ya muchas cosas raras cuando en informática no se toman todas las precauciones...


Imagen 5. Apagado lento del servidor


Accedemos al directorio de datos donde restauraremos el archivo de backup:

Imagen 6. Directorio de datos equipo de destino antes de restaurar


Descomprimimos el archivo:

Imagen 7. Descomprimimos el archivo de backup

Después borramos nuestra copia de seguridad del directorio de datos de MySQL, cerramos sesión con el usuario root y lanzamos de nuevo el servicio MySQL, si hemos hecho todo correcto veremos que en la máquina en la que hemos realizado la restauración aparece la base de datos original y podemos realizar operaciones sobre ella sin problemas. No hay que olvidar que puede que queramos volver a establecer el apagado lento a valor 1, para ello basta modificar el valor de la variable como se hizo para establecerlo a 0.

Imagen 8. Base de datos restaurada en otro equipo y funcionando




No hay comentarios:

Publicar un comentario

¿Hello World en Sonic Pi?

¿Hello World en Sonic Pi? Llevo un tiempo programando en  Sonic PI , un entorno de programación que posee un lenguaje propio orientado al...