Creación de una copia de seguridad de MySQL utilizando la herramienta XtraBackup

Percona XtraBackup es una herramienta para la copia de seguridad en caliente de bases de datos MySQL.

Durante la creación de la copia de seguridad, no hay bloqueo de tablas, su sistema sigue funcionando sin ninguna limitación.

XtraBackup 2.4 puede crear copias de seguridad de tablas InnoDB, XtraDB y MyISAM en servidores MySQL 5.11, 5.5, 5.6 y 5.7, así como en el servidor Percona para MySQL con XtraDB.

Para trabajar con MySQL 8.x se debe utilizar la versión XtraBackup 8.x. En este artículo se hablará solo de XtraBackup 2.4.

La ventaja principal XtraBackup radica en que esta herramienta es adecuada tanto para crear copias de seguridad de sistemas altamente cargados servidores, como para sistemas con un bajo número de transacciones.

Si el tamaño total de sus bases de datos MySQL es significativo (decenas de gigabytes), entonces la herramienta estándar mysqldump no permitirá realizar la copia de seguridad de manera rápida, y la recuperación del volcado tomará mucho tiempo.

Instalación

Instalación XtraBackup del repositorio apt Percona.

Ejecute los siguientes comandos de forma secuencial:

wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb

sudo dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb

sudo apt-get update 

sudo apt-get install percona-xtrabackup-24

2. Después de la instalación, ejecute el comando xtrabackup -v. Es importante asegurarse de que la herramienta funcione correctamente en el servidor. Como resultado, en pantalla aparecerá algo como esto:

xtrabackup: recognized server arguments: — datadir=/var/lib/mysql — tmpdir=/tmp — server-id=1 — logbin=/var/log/mysql/mysql-bin.log — innodbbufferpoolsize=16384M — innodbfilepertable=1 — innodbflushmethod=Odirect — innodbflushlogattrxcommit=0xtrabackup version 2.4.20 based on MySQL server 5.7.26 Linux (x8664) (revision id: c8b4056)

Creación de una copia de seguridad de MySQL utilizando la herramienta XtraBackup

Los permisos, accesos y privilegios 

XtraBackup debe tener la capacidad de:

  • Conectarse a su servidor MySQL.

  • Tener acceso al directorio datadir. 

  • Durante la creación de la copia de seguridad, tener permisos de escritura en el directorio especificado a través del parámetro target-dir directorio.

¿Qué es el datadir?

datadir es el directorio donde el servidor de bases de datos MySQL almacena los datos. Todas las bases de datos, todas las tablas están allí. En la mayoría de las distribuciones de Linux, por defecto, este directorio es /var/lib/mysql.

¿Qué es el directorio target-dir?

target-dir es el directorio en el que se guardará la copia de seguridad.

El usuario de la base de datos necesita los siguientes permisos de acceso a las tablas y bases de datos que se van a respaldar:

  • RELOAD y LOCK TABLES

  • REPLICATION CLIENT

  • CREATE TABLESPACE

  • PROCESS

  • SUPER

  • CREAR

  • INSERTAR

  • SELECCIONAR

Configuración 

Configuración XtraBackup se realiza con las opciones que se comportan de la misma manera que los parámetros estándar de MySQL.

¿Qué significa esto?

Los parámetros de configuración pueden especificarse en la línea de comandos o en el archivo de configuración de la base de datos, por ejemplo en /etc/my.cnf.

La herramienta XtraBackup, al iniciarse, lee las secciones [mysqld] y [xtrabackup] de los archivos de configuración de MySQL. Esto se hace para que la herramienta pueda usar la configuración de tu base de datos sin necesidad de especificar parámetros manualmente en cada copia de seguridad.

Por ejemplo, el valor datadir y algunos parámetros InnoDB de XtraBackup se obtienen de la configuración de tu base de datos.

Si deseas anular los parámetros para el funcionamiento de XtraBackup que se encuentran en la sección [mysqld], simplemente indícalos en el archivo de configuración en la sección [xtrabackup]. Dado que se leerán después, tendrán mayor prioridad.

No es necesario que agregues ningún parámetro en my.cnf. Todos los parámetros requeridos pueden especificarse en la línea de comandos. Generalmente, lo único que puede ser útil colocar en la sección [xtrabackup] de tu my.cnf — es el parámetro target_dir, que por defecto define el directorio donde se guardarán las copias de seguridad. Pero esto no es obligatorio.

Ejemplo de especificación de la ruta al directorio de copias de seguridad en my.cnf:

[xtrabackup]
target_dir = /data/backups/mysql/

Script para crear una copia de seguridad

Para crear una copia de seguridad, puedes usar el siguiente script:

#!/bin/bash

# Удаляем данные в каталоге бекапа
rm -rf /mysql/backup

# Cоздаём бекап
xtrabackup --user=xtrabackup 
 --password=xxxx_SECRET_xxxx 
 --backup 
 --target-dir=/mysql/backup

# Выполняем подготовку бекапа для развёртывания
xtrabackup --prepare --target-dir=/mysql/backup

# Создаём архив
tar -zcvf /home/developer/dumps/xtrabackup-all-dbs-"$(date +%F-%H:%M:%S)".gz /mysql/backup

¿Qué ocurre durante la ejecución del script?

Primero, limpiamos (eliminamos) el directorio donde vamos a guardar la copia de seguridad:

rm -rf /mysql/backup.

Luego, con la ayuda de la herramienta XtraBackup creamos la copia de seguridad y la guardamos en /mysql/backup/:

xtrabackup --user=xtrabackup --password=xxxxz1cYf95550Gc6xxxxxxxpE3rB03xxxx --backup --target-dir=/mysql/backup

Previamente, en MySQL, hemos creado un usuario xtrabackup con los privilegios requeridos. Con el parámetro target-dir indicamos el directorio donde se debe guardar la copia de seguridad.

¡Un punto importante!

Fíjate en la línea del script:

xtrabackup --prepare --target-dir=/mysql/backup

Los datos en el directorio /mysql/backup no son consistentes hasta que no se preparen. 

Esto se debe a que durante la copia de los archivos pueden haber ocurrido cambios. La operación xtrabackup --prepare --target-dir=/mysql/backup hace que los datos de la copia de seguridad sean perfectamente coherentes en el tiempo.

La operación de preparación de datos se puede realizar en cualquier máquina. No es necesario hacerlo en el servidor donde se encuentra la base de datos original. Puedes copiar la copia de seguridad en el servidor de destino y prepararla allí.

Lo último que hacemos es crear un archivo en el que colocamos nuestra copia de seguridad:

tar -zcvf /home/developer/dumps/xtrabackup-all-dbs-«$(date +%F_%H_%M_%S)».gz /mysql/backup

Restauración de la copia de seguridad 

Antes de comenzar la restauración de la copia de seguridad en el servidor de destino, los datos deben pasar por la etapa de preparación. Cómo hacerlo, véalo más arriba.

El proceso de restauración de datos es muy sencillo. Necesita extraer la copia de seguridad del archivo comprimido y reemplazar los datos en datadir.

¿Cómo reemplazar los datos en datadir?

Consideremos dos opciones.

Opción 1

Utilizar la herramienta XtraBackup. Debe especificar la opción --copy-back. 

El siguiente comando trasladará la copia de seguridad a datadir del servidor de destino:

xtrabackup --copy-back --target-dir=/mysql/backup

Opción 2

También se puede hacer de otra manera, prescindiendo de la herramienta XtraBackup.

Todo lo que necesita hacer es copiar la copia de seguridad a datadir. Puede hacerlo usando cp o rsync.

Es importante entender que el procedimiento de restauración de la copia de seguridad se reduce únicamente a reemplazar el contenido del directorio datadir.

Antes de comenzar la restauración de la copia de seguridad en el servidor de destino, es necesario:

  • Detener el servidor MySQL.

  • Limpiar la carpeta datadir o mover su contenido a otro lugar. El directorio datadir debe estar vacío.

Después de completar el traslado de los datos a datadir puede iniciar el servidor MySQL.

Materiales utilizados

Documentación oficial Percona XtraBackup.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster