sql >> Base de Datos >  >> RDS >> MariaDB

Copias de seguridad de bases de datos:comparación de MariaDB Mariabackup y Percona Xtrabackup

Su servidor de base de datos almacena parte de la información más valiosa de su empresa. Garantizar copias de seguridad confiables de la base de datos para evitar la pérdida de datos en caso de accidente o falla del hardware es una casilla de verificación crítica.

Ya sea que se trate de un servidor altamente cargado las 24 horas del día, los 7 días de la semana o de un entorno de bajo volumen de transacciones, tendrá la necesidad de hacer que las copias de seguridad sean un procedimiento fluido sin interrumpir el rendimiento del servidor en un entorno de producción.

En este blog, vamos a revisar dos de las herramientas más utilizadas para realizar esta tarea, a saber, Percona XtraBackup y Mariabackup. Revisaremos las similitudes y diferencias entre los dos, y también cómo usarlos.

¿Qué es Percona XtraBackup?

Percona XtraBackup es una herramienta de código abierto para realizar copias de seguridad de las bases de datos MariaDB, MySQL y Percona Server. Realiza copias de seguridad completas seguras y sin bloqueo (para los motores compatibles) en línea en sistemas transaccionales para que las aplicaciones permanezcan completamente disponibles durante la ventana de copia de seguridad.

Con esta herramienta puedes:

  • Cree copias de seguridad calientes de InnoDB, que se completan de forma rápida y confiable, sin pausar su base de datos ni agregar carga al servidor
  • Realice copias de seguridad incrementales
  • Mover tablas entre servidores MySQL en línea
  • Cree nuevos esclavos de replicación de MySQL fácilmente
  • Transmita copias de seguridad comprimidas de MySQL a otro servidor
  • Ahorre espacio en disco y ancho de banda de red

¿Qué es Mariabackup?

Mariabackup es una herramienta de código abierto proporcionada por MariaDB para realizar copias de seguridad físicas en línea. Es una bifurcación de Percona XtraBackup diseñada para trabajar con tablas cifradas y comprimidas, y es el método de copia de seguridad recomendado para bases de datos MariaDB.

MariaDB Server 10.1 introdujo la compresión de MariaDB y el cifrado de datos en reposo, pero las soluciones de copia de seguridad existentes no admitían la capacidad de copia de seguridad completa para estas funciones. Entonces, MariaDB decidió extender XtraBackup (versión 2.3.8) y llamó a esta solución Mariabackup.

Diferencias entre Percona XtraBackup y Mariabackup

Como mencionamos anteriormente, Mariabackup es la herramienta de copia de seguridad recomendada para MariaDB, y la principal diferencia con XtraBackup es que funciona con tablas cifradas y comprimidas.

De todos modos, si por alguna razón en particular quieres usar XtraBackup para tu base de datos MariaDB, hay algunos puntos a tener en cuenta dependiendo de la versión del servidor MariaDB que tengas:

  • MariaDB 10.1:con datos de MariaDB sin comprimir y sin cifrar, puede usar XtraBackup. Si se usa encriptación o compresión, o cuando innodb_page_size se establece en algún valor que no sea 16K, no funcionará.
  • MariaDB 10.2:También puede intentar usar XtraBackup, pero tenga en cuenta que es probable que los problemas se deban al error de incompatibilidad del formato de registro de deshacer de MySQL 5.7 que se solucionó en MariaDB 10.2.2. Debido a este error, es posible que las copias de seguridad preparadas con XtraBackup no recuperen algunas transacciones. Solo si ejecuta el servidor con la configuración innodb_undo_logs=1, esto no sería un problema.
  • MariaDB 10.3 y posterior:este caso es más simple. XtraBackup no es compatible.

Además, hay algunas limitaciones a tener en cuenta al usar Mariabackup:

  • MyRocks:a partir de MariaDB 10.2.16 y MariaDB 10.3.8, Mariabackup realizará una copia de seguridad de los datos del motor de almacenamiento de MyRocks. Actualmente no se admite la copia de seguridad parcial de los datos de MyRocks. La copia de seguridad incremental almacenará una copia completa de los datos de MyRocks.
  • Funcionalidad de archivo de exportación:antes de MariaDB 10.2.9, Mariabackup no admitía la funcionalidad --export (crea un archivo de exportación para exportar datos de la base de datos). Puede solucionar esta limitación preparando la copia de seguridad como de costumbre (sin el indicador --export), luego inicie el servidor y ejecute FLUSH TABLES FOR EXPORT.
  • Archivos de registro:las versiones de Mariabackup hasta la 10.2.8 no crean archivos de registro vacíos y dependen de la acción --copy-back ejecutada por el usuario (que elimina los archivos de registro antiguos de innodb, si los hay). Si el usuario no usa --copy-back o se asegura de que el directorio de datos esté vacío antes de restaurar, las copias de seguridad creadas con estas versiones pueden volverse inconsistentes/dañadas (debido a la presencia de registros sobrantes de InnoDB).
  • Gcrypt:el cifrado basado en la herramienta de copia de seguridad (gcrypt) no es compatible con Mariabackup.
  • Opción Innobackupex:Sin enlace simbólico a innobackupex (use el parámetro --innobackupex en su lugar). La herramienta innobackupex parchea y proporciona funciones adicionales sobre la herramienta innobackup para realizar copias de seguridad de tablas InnoDB y MyISAM.
  • Opción compacta:la opción --compact no es compatible.
  • Opción de reconstrucción de índices:la opción --rebuild_indexes no es compatible.
  • Tar para archivos de copia de seguridad:la compatibilidad con --stream=tar se eliminó en Mariabackup 10.1.24 (las opciones --streams transmiten los archivos de copia de seguridad a la salida estándar).

Por último, pero no menos importante, Mariabackup se puede instalar en Windows.

Proceso de copia de seguridad Proceso de restauración

Cómo - Percona XtraBackup y Mariabackup

Veamos cómo podemos instalarlo y usarlo.

Instalación

Tiene diferentes métodos para instalar tanto XtraBackup como Mariabackup. Probemos la instalación desde repositorios.

Instalación de XtraBackup

En Debian/Ubuntu
$ wget https://repo.percona.com/apt/percona-release_0.1-6.$(lsb_release -sc)_all.deb
$ sudo dpkg -i percona-release_0.1-6.$(lsb_release -sc)_all.deb
$ sudo apt-get update
$ sudo apt-get install percona-xtrabackup-24
En RedHat/CentOS
$ sudo yum install http://www.percona.com/downloads/percona-release/redhat/0.1-6/percona-release-0.1-6.noarch.rpm
$ sudo yum install percona-xtrabackup-24

Instalación de copia de seguridad de María

En Debian/Ubuntu

Mariabackup es parte de MariaDB Server a partir de MariaDB 10.1.23.

$ sudo apt-get install software-properties-common
$ sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
$ sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://nyc2.mirrors.digitalocean.com/mariadb/repo/10.1/ubuntu bionic main'
$ sudo apt-get update
$ sudo apt-get install mariadb-server-10.1
En CentOS/RedHat
$ sudo vi /etc/yum.repos.d/MariaDB.repo
[mariadb]
name=MariaDB
baseurl=http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
$ sudo yum install MariaDB-backup

Configuración

Tanto Xtrabackup como Mariabackup leen las secciones [mysqld] y [xtrabackup] de cualquier archivo de configuración de MySQL, en ese orden. De esta forma, puede leer parámetros de MySQL, como datadir o parámetros de InnoDB.

Podemos modificar los parámetros incluidos en la sección [mysqld] modificando su valor en [xtrabackup], como mencionamos antes, se leen en orden, por lo que lo último que tengamos en [xtrabackup] tendrá prioridad.

[mysqld]
datadir=/data/datadir
[xtrabackup]
target_dir=/backups/

El usuario con los privilegios mínimos necesarios para realizar copias de seguridad completas sería RECARGAR, BLOQUEAR TABLAS, PROCESAR y REPLICAR CLIENTE:

mysql> CREATE USER 'backupuser'@'localhost' IDENTIFIED BY 'Password';
mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'backupuser'@'localhost';

Y luego, puede agregar este usuario en los archivos de configuración de MySQL:

[xtrabackup]
user=backupuser
password=Password

Además, puede utilizar Xtrabackup o Mariabackup para realizar transferencias de instantáneas de estado cuando utiliza un clúster Percona XtraDB o un clúster MariaDB Galera. Debe establecer las variables wsrep_sst_method y wsrep_sst_auth en los archivos de configuración:

[mysqld]
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth=backupuser:Password

O

[mysqld]
wsrep_sst_method=mariabackup
wsrep_sst_auth=backupuser:Password

Uso

Dado que Mariabackup se basa en XtraBackup, se puede usar de manera similar.

Ahora veamos un ejemplo usando ambos métodos para crear, preparar y restaurar una copia de seguridad completa.

Crear una copia de seguridad

Para crear una nueva copia de seguridad con XtraBackup o Mariabackup, debe agregar las opciones --backup y --target-dir a la línea de comando:

$ xtrabackup --backup --target-dir=/backups/

O

$ mariabackup --backup --target-dir=/backups/

El directorio de destino, donde se almacenará la copia de seguridad, se puede especificar en los archivos de configuración de MySQL. El proceso de copia de seguridad no sobrescribirá los archivos existentes. Si el archivo existe, la copia de seguridad fallará.

Transaction log of lsn (9755450) to (9755467) was copied.
181122 23:02:44 completed OK!

Si todo salió bien, la última línea que vea debería ser "¡Completado bien!". Puede cancelar la copia de seguridad en cualquier momento, ya que no modifica el contenido de la base de datos.

[[email protected] ~]# ls -l /backups/
total 102448
-rw-r----- 1 root root       488 Nov 22 23:02 backup-my.cnf
-rw-r----- 1 root root       482 Nov 22 23:02 ib_buffer_pool
-rw-r----- 1 root root 104857600 Nov 22 23:02 ibdata1
drwxr-x--- 2 root root      4096 Nov 22 23:02 mysql
drwxr-x--- 2 root root      4096 Nov 22 23:02 performance_schema
drwxr-x--- 2 root root      4096 Nov 22 23:02 sakila
drwxr-x--- 2 root root     12288 Nov 22 23:02 sys
-rw-r----- 1 root root        64 Nov 22 23:02 xtrabackup_binlog_info
-rw-r----- 1 root root       113 Nov 22 23:02 xtrabackup_checkpoints
-rw-r----- 1 root root       533 Nov 22 23:02 xtrabackup_info
-rw-r----- 1 root root      2560 Nov 22 23:02 xtrabackup_logfile

Este debería ser el contenido de su copia de seguridad. Podría cambiar dependiendo de sus bases de datos.

Preparando una copia de seguridad

Cuando haya creado su copia de seguridad con XtraBackup o Mariabackup, debe prepararla para restaurarla. Los archivos de datos no son consistentes hasta que se han preparado, porque se copiaron en diferentes momentos durante la duración de la copia de seguridad. Si intenta restaurarlo e iniciar su base de datos, detectará daños y se bloqueará para evitar que se ejecute con datos inconsistentes.

Para preparar la copia de seguridad, debe ejecutar el comando xtrabackup o mariabackup con la opción --prepare y especificar el directorio de destino donde se almacena la copia de seguridad.

$ xtrabackup --prepare --target-dir=/backups/

O

$ mariabackup --prepare --target-dir=/backups/
InnoDB: Shutdown completed; log sequence number 9757224
181122 23:05:29 completed OK!

La última línea que vea debería ser "Apagado completado; número de secuencia de registro xxxxxxx" y "completado OK". si todo salio bien. No se recomienda cancelar el proceso de preparación porque puede dañar el archivo de datos y la copia de seguridad quedará inutilizable.

Si desea usar esta copia de seguridad con una copia de seguridad incremental más adelante, debe usar la opción --apply-log-only al prepararla, o no podrá hacerlo.

Restauración de una copia de seguridad

Después de preparar la copia de seguridad, puede usar la opción de restauración con los parámetros --copy-back o --move-back, para copiar o mover la copia de seguridad al directorio de datos. Si no tiene suficiente espacio en disco, probablemente debería usar la opción de mover. Además, debemos especificar el directorio de destino donde se almacena la copia de seguridad. Tenga en cuenta que el directorio de datos debe estar vacío y el servicio de la base de datos debe estar inactivo antes de restaurar la copia de seguridad.

$ xtrabackup --copy-back --target-dir=/backups/

O

$ mariabackup --copy-back --target-dir=/backups/

Primero copiará/moverá las tablas e índices de MyISAM, luego las tablas e índices de InnoDB y, por último, los archivos de registro. Conservará los atributos del archivo al copiarlos, es posible que deba cambiar la propiedad de los archivos a mysql antes de iniciar el servidor de la base de datos, ya que serán propiedad del usuario que creó la copia de seguridad.

$ sudo chown -R mysql:mysql /var/lib/mysql

Hay varios parámetros para usar con Xtrabackup y Mariabackup. Puede comprobar estos parámetros aquí para XtraBackup y aquí para Mariabackup.

ClusterControlConsola única para toda su infraestructura de base de datosDescubra qué más hay de nuevo en ClusterControlInstale ClusterControl GRATIS

Gestionar sus copias de seguridad en ClusterControl

Como vimos anteriormente, ejecutar una copia de seguridad no es ciencia espacial. También se puede programar con cron (¡pero tenga cuidado con las fallas silenciosas!). Sin embargo, un script para crear copias de seguridad periódicamente no es una solución de gestión de copias de seguridad. Necesita una forma de informar sobre sus copias de seguridad y alertar sobre fallas. Ahora, configurar copias de seguridad en su entorno y ver que las copias de seguridad funcionan sin errores no significa que todo esté bien. Es posible que haya oído hablar de la copia de seguridad de Schrödinger, que establece que se desconoce el estado de cualquier copia de seguridad hasta que se intenta restaurar. Porque lo peor que puede pasar es un desastre y te das cuenta de que las copias de seguridad están mal por alguna razón. Intenta restaurar los archivos de los que se hizo una copia de seguridad, y no restaura lo que cree que hizo una copia de seguridad, ¡o no restaura en absoluto! Luego están cosas como mover archivos de copia de seguridad fuera del sitio, p. al almacenamiento externo en la nube, para la recuperación ante desastres. El cifrado y el manejo de claves son importantes para la seguridad. También es necesario gestionar la retención de copias de seguridad locales y externas/archivadas.

Veamos cómo puede ayudar ClusterControl.

Si desea utilizar la función de copia de seguridad de ClusterControl, vaya a ClusterControl -> Seleccione Clúster -> Copia de seguridad, y allí podrá ver sus copias de seguridad actuales, crear o programar una nueva.

Sección de copia de seguridad de ClusterControl

Usando la opción de crear o programar, podemos elegir ambos métodos, XtraBackup o Mariabackup. En la misma sección, podemos elegir el servidor desde el que tomar la copia de seguridad, habilitar la copia de seguridad parcial, elegir dónde desea almacenar la copia de seguridad y si desea cargar la copia de seguridad en la nube (AWS, Azure o Google Cloud).

ClusterControl Crear copia de seguridad 1

Luego, podemos seleccionar parámetros de respaldo como compresión, encriptación y retención.

ClusterControl Crear copia de seguridad 2

Y estos deberían ser los comandos que ClusterControl ejecutará por usted:

[16:37:58]: 192.168.100.120: Launching ( LC_ALL=C /usr/bin/innobackupex --defaults-file=/etc/my.cnf --galera-info --parallel 1 --stream=xbstream --no-timestamp . | gzip -6 - > /root/backups/BACKUP-13/backup-full-2018-11-14_193757.xbstream.gz ) 2>&1.

O

[16:29:57]: 192.168.100.131: Launching ( LC_ALL=C /usr/bin/mariabackup --defaults-file=/etc/my.cnf --backup --galera-info --parallel 1 --stream=xbstream --no-timestamp | gzip -6 - > /root/backups/BACKUP-11/backup-full-2018-11-14_192957.xbstream.gz ) 2>&1.

Este comando puede ser diferente según los parámetros que elija.

Como pudimos ver, ClusterControl es un buen aliado si queremos utilizar XtraBackup o Mariabackup. Podemos ejecutar comandos de copia de seguridad complejos de forma sencilla, seleccionando las opciones de la interfaz de usuario de ClusterControl.
ClusterControl admite copias de seguridad completas o incrementales, por lo que podemos configurar toda nuestra estrategia de copia de seguridad desde una interfaz de usuario amigable.

Conclusión

Al realizar una copia de seguridad de un servidor MariaDB, se recomienda utilizar la herramienta Mariabackup. Sin embargo, si por alguna razón prefiere usar XtraBackup, aún puede hacerlo. Pero debe tener en cuenta las restricciones que se aplican, como hemos señalado en este blog. Y finalmente, discutimos cómo una secuencia de comandos para hacer una copia de seguridad de una base de datos no es lo mismo que una solución de administración de copias de seguridad, y echamos un vistazo rápido a ClusterControl.

Háganos saber si nos hemos perdido alguna diferencia entre XtraBackup y MariaBackup.

Las copias de seguridad sin bloqueo son compatibles con los motores de almacenamiento InnoDB, XtraDB y HailDB. Se puede realizar una copia de seguridad de los siguientes motores de almacenamiento pausando brevemente las escrituras al final de la copia de seguridad:MyISAM, Merge y Archive, incluidas las tablas particionadas, los disparadores y las opciones de la base de datos.