Backup físico de una base de datos MySQL a Google Cloud

Hola a todos, hoy queríamos compartir con vosotros una forma de realizar un backup físico de una base de datos MySQL en Google Cloud. Con esta forma de realizar el backup podemos realizar una copia más rápida que realizando un backup lógico y además poder salvaguardar nuestra copia fuera de nuestro sitio físico y evitar problemas en caso de desastre.

Para realizar la copia la utilizamos la suite gratuita Xtrabackup de Percona, que nos permite realizar la copia “en caliente” sin apenas interferir en nuestro sistema Linux. La información la tenéis disponible en esta ruta:

https://www.percona.com/software/mysql-database/percona-xtrabackup

Una vez que lo tengamos instalada, vamos a utilizar dos comandos para realizar la copia, los comandos son xtrabackup y xbcloud. El primer comando realiza el backup y la segunda va subiendo la salida a nuestra unidad de Google Cloud. El comando completo es:

xtrabackup --user=root --password='********' --backup --stream=xbstream --compress --compress-threads=5 --extra-lsndir=/testbackup --target-dir=/testbackup --parallel=5 | xbcloud put --storage=google --google-endpoint='storage.googleapis.com' --google-access-key=******* --google-secret-key=****** --google-bucket=nuestrobucket --parallel=5 $fechahoy/$HOSTNAME-full-backup

Backup físico de una base de datos con XtraBackup

El comando xtrabackup lo lanzamos con el parámetro –stream=xbstream que nos permite recogerlo posteriormente en  xbcloud y subirlo directamente. El directorio /testbackup se utiliza únicamente como repositorio temporal por lo que no requiere demasiado espacio. También lanzamos la copia comprimida con 5 hilos para acelerar la copia, pero lo podemos adaptar al hardware de nuestra máquina, especialmente las CPU’s que queramos utilizar.

La siguiente parte del script tiene el comando xbcloud put, que se encarga de subir nuestros ficheros de base de datos comprimidos al cloud de Google. En esta parte se pone la configuración de nuestra cuenta:

--storage=google --google-endpoint='storage.googleapis.com' --google-access-key=******* --google-secret-key=****** --google-bucket=nuestrobucket

En la parte final, ya indicamos de nuevo los hilos de subida con –parallel=5 y la ruta donde vamos a dejar los ficheros con $fechahoy/$HOSTNAME-full-backup. La variable $fechahoy simplemente contiene fechahoy=$(date +»%Y-%m-%d»), la fecha en formato 2021-06-04 por ejemplo y la $HOSTNAME la coge del sistema operativo y nos sirve para crear distintas carpetas si queremos realizar este proceso con varios servidor.

Una vez que lo lancemos veremos como sube los ficheros a nuestra carpeta en la nube:

 210604 10:29:48 xbcloud: successfully uploaded chunk: 2021-06-04/serverprod2-full-backup/mysql/gtid_executed.ibd.qp.00000000000000000000, size: 1792
 210604 10:29:48 xbcloud: successfully uploaded chunk: 2021-06-04/serverprod2-full-backup/mysql/gtid_executed.ibd.qp.00000000000000000001, size: 40
 210604 10:29:48 xbcloud: successfully uploaded chunk: 2021-06-04/serverprod2-full-backup/mysql/engine_cost.ibd.qp.00000000000000000000, size: 1870
 210604 10:29:48 xbcloud: successfully uploaded chunk: 2021-06-04/serverprod2-full-backup/mysql/engine_cost.ibd.qp.00000000000000000001, size: 38
 210604 10:29:48 xbcloud: successfully uploaded chunk: 2021-06-04/serverprod2-full-backup/mysql/plugin.ibd.qp.00000000000000000000, size: 1778
 210604 10:29:48 xbcloud: successfully uploaded chunk: 2021-06-04/serverprod2-full-backup/mysql/plugin.ibd.qp.00000000000000000001, size: 33
 210604 10:29:48 xbcloud: successfully uploaded chunk: 2021-06-04/serverprod2-full-backup/mysql/time_zone_transition.ibd.qp.00000000000000000001, size: 47
 210604 10:29:48 xbcloud: successfully uploaded chunk: 2021-06-04/serverprod2-full-backup/mysql/time_zone_transition.ibd.qp.00000000000000000000, size: 1808
 210604 10:29:48 xbcloud: successfully uploaded chunk: 2021-06-04/serverprod2-full-backup/mysql/slave_worker_info.ibd.qp.00000000000000000000, size: 1800
 210604 10:29:48 xbcloud: successfully uploaded chunk: 2021-06-04/serverprod2-full-backup/mysql/slave_master_info.ibd.qp.00000000000000000000, size: 1800
 210604 10:29:48 xbcloud: successfully uploaded chunk: 2021-06-04/serverprod2-full-backup/mysql/slave_worker_info.ibd.qp.00000000000000000001, size: 44 

Los ficheros suben en porciones de 10 Mb en los que no tendremos problemas a la hora de restaurar.

A tener en cuenta

** Importante. Es posible que tengamos problemas con el número de ficheros abiertos, ya que la herramienta Xtrabackup los necesita para realizar un backup consistente. Podemos darnos cuenta de este problema porque de repente la copia se copia a la mitad dando un error de que no ha podido subir todos los ficheros. En este caso, lo mejor es cambiar el número de ficheros abiertos del usuario que realiza el backup, en nuestro caso root. Para ello lo que modificamos es el fichero /etc/security/limits.conf con los siguientes parámetros:

 root soft     nproc          65535
 root hard     nproc          65535
 root soft     nofile         65535
 root hard     nofile         65535 

Para este ejemplo hemos utilizado Google Cloud, pero el binario de Xtrabackup nos permite subir los ficheros también a Amazon S3 y Swift, lo que nos da la flexibilidad incluso para distribuir nuestras copias en distintos sistemas de cloud.

Esperamos que os sea interesante el post y en una nueva entrada veremos como recuperar los datos que hemos subido en el mismo servidor o sobre uno nuevo para recuperar algún dato que necesitemos.

Si después de leer este artículo no has podido hacer el backup correctamente o quieres que evaluemos tus caso, contacta sin compromiso en nuestra página de contacto.

Si te ha gustado este artículo, suscríbete a nuestra newsletter mensual para estar al día de todas nuestras publicaciones con un solo email al mes.

¿Aún no conoces Query Performance? Descubre cómo puede ayudarte en tu entorno Oracle. Más información en su página de LinkedIn.

Sígue a GPS en LinkedIn

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *