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