Copia de Seguridad · 5 min read · Dec 13, 2025

Realizar Copias de Seguridad en Caliente de Bases de Datos MySQL con Percona XtraBackup en Ubuntu 16.04

Percona XtraBackup es una utilidad de copia de seguridad de código abierto para MySQL. Soporta todos los sabores de MySQL como Percona Server, MariaDB y (Oracle) MySQL. Percona Xtrabackup realiza una copia de seguridad en caliente para MySQL. La copia de seguridad en caliente significa crear una copia de seguridad de un servidor MySQL mientras está en funcionamiento sin tiempo de inactividad.

En este tutorial, te mostraré cómo crear una copia de seguridad caliente de una base de datos MySQL con la herramienta de código abierto Percona XtraBackup en Ubuntu 16.04 (Xenial Xerus). Usaré MariaDB como el servidor de base de datos para realizar la copia de seguridad, pero la misma configuración funcionará para servidores MySQL también.

Requisitos previos

  • Servidor Ubuntu 16.04 - (Xenial Xerus)
  • Servidor MySQL o MariaDB
  • Privilegios de Root

Paso 1 - Instalar Percona XtraBackup

El primer paso es instalar el software más reciente de Percona XtraBackup en nuestro servidor Ubuntu. Inicia sesión en tu servidor por SSH (o en la consola):

ssh [email protected]  
ESCRIBE TU CONTRASEÑA

Percona XtraBackup está disponible en el repositorio de Ubuntu, pero queremos usar la última versión del repositorio de Percona.

Agrega el repositorio de Percona descargando el paquete deb desde la web e instálalo con el comando dpkg:

wget https://repo.percona.com/apt/percona-release_0.1-3.$(lsb_release -sc)_all.deb  
sudo dpkg -i percona-release_0.1-3.$(lsb_release -sc)_all.deb

A continuación, actualiza el repositorio e instala Percona XtraBackup 2.4 (la última versión en este momento):

sudo apt-get update  
sudo apt-get install percona-xtrabackup-24

Percona XtraBackup está instalado.

Paso 2 - Configurar Usuario y Directorio de Copia de Seguridad

Para realizar la copia de seguridad en caliente, necesitamos crear un nuevo usuario mysql con privilegios y permisos especiales. En este tutorial, usaré MariaDB 10.0 como el servidor de base de datos. Si aún no has instalado una base de datos compatible con MySQL, puedes instalarla con el siguiente comando:

sudo apt-get install mariadb-server mariadb-client

Establece una contraseña segura para el usuario root con este comando:

mysql_secure_installation

Si MariaDB está instalado, accede a la consola de MariaDB/MySQL como usuario root con el comando del cliente mysql:

mysql -u root -p  
ESCRIBE LA CONTRASEÑA DE MySQL

Crea un nuevo usuario llamado ‘ bekupuser ‘ con la contraseña ‘ mypassword ‘ (elige una contraseña segura para tu servidor!):

CREATE USER 'bekupuser'@'localhost' IDENTIFIED BY 'mypassword';

Otorga al usuario los siguientes privilegios: ‘RELOAD, PROCESS, LOCK TABLES, REPLICATION CLIENT’.

GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'bekupuser'@'localhost';  
FLUSH PRIVILEGES;  
exit

A continuación, crea un nuevo directorio para almacenar los archivos de copia de seguridad de MySQL:

mkdir -p /data/backups/mysql/

Se han creado el nuevo usuario de copia de seguridad y un directorio de copia de seguridad.

Paso 3 - Realizar Copia de Seguridad con Innobackupex

Innobackupex es un script Perl que envuelve el programa xtrabackup. Es una versión parcheada del script innobackup proporcionado por Oracle, distribuido con la herramienta InnoDB Backup. Innobackupex proporciona copia de seguridad para toda una instancia de base de datos MySQL, utilizando xtrabackup en combinación con xbstream y xbcrypt.

En este paso, crearemos y prepararemos una copia de seguridad completa para la instancia de MySQL.

A. Crear una copia de seguridad con Innobackupex

En el paso 2, hemos creado un nuevo directorio para la copia de seguridad y agregado un nuevo usuario de copia de seguridad mysql. Los usaremos ahora para crear una copia de seguridad con el comando innobackupex.

Crea una copia de seguridad de MySQL con innobackupex en el nuevo directorio ‘/data/backups/my_backup’:

innobackupex --user=bekupuser  --password=mypassword --no-timestamp /data/backups/my_backup

Nota:

–user = usuario con los privilegios de copia de seguridad requeridos (paso-2).

–password = contraseña del usuario de copia de seguridad.

–no-timestamp = deshabilitar la creación de un nuevo subdirectorio con marca de tiempo en el directorio raíz de la copia de seguridad.

/data/backups/my_backup = directorio para la copia de seguridad, se creará automáticamente durante el proceso de copia de seguridad. Si el directorio existe, recibirás un mensaje de error.

Crear una copia de seguridad con Percona XtraBackup

Otra opción:

mkdir -p /data/backups/my_backup2  
  
innobackupex --user=bekupuser --password=mypassword /data/backups/my_backup2  
  
or  
innobackupex --user=bekupuser --password=mypassword /data/backups/

Nota:

Si no hay un directorio ‘ my_backup2 ‘, obtendrás tu directorio basado en el formato ‘ timestamp ‘.

Resultados:

B. Preparar una Copia de Seguridad Completa con Innobackupex

Después de crear una nueva copia de seguridad, los datos no están listos para ser restaurados. Hay un paso más para que los datos puedan ser restaurados. Necesitamos la ‘etapa de preparación’ para que los datos puedan ser restaurados.

Prepara la copia de seguridad usando innobackupex con la opción –apply-log al directorio de copia de seguridad ‘/data/backups/my_backup ‘:

innobackupex --apply-log /data/backups/my_backup

Asegúrate de que el proceso se complete sin errores antes de continuar.

Preparar la Copia de Seguridad Completa

Si tienes suficiente memoria y una base de datos grande, puedes usar la opción –use-memory=memorynumber para indicarle a innobackupex cuánta memoria puede usar:

innobackupex --apply-log --use-memory=4G /data/backups/my_backup

Los datos están listos para ser restaurados ahora. Podemos restaurarlos en el mismo servidor o en otro servidor que esté ejecutando MariaDB.

Paso 4 - Restaurar la Copia de Seguridad Completa con Innobackupex

En este paso, restauraremos la instancia de MySQL con innobackupex.

Antes de restaurar la instancia de MySQL, necesitamos detener el proceso de MySQL con el comando systemctl (el proceso de MariaDB se llama mysql):

systemctl stop mysql

Haz una copia de seguridad del antiguo directorio de datos de MySQL:

mkdir ~/mysql_old/  
mv /var/lib/mysql/* ~/mysql_old/

A continuación, restaura la instancia de mysql desde la copia de seguridad completa con innobackupex:

innobackupex --copy-back /data/backups/my_backup

Cuando veas el resultado ‘ innobackupex: completed OK ‘, entonces has restaurado con éxito tu instancia de MySQL.

Ahora cambia el propietario del directorio de datos de MySQL al usuario mysql y vuelve a iniciar el servicio:

chown -R mysql:mysql /var/lib/mysql  
systemctl start mysql

restaurar la copia de seguridad

La instancia de MySQL ha sido restaurada con éxito con percona-xtrabackup.

Referencia

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.