Inicio > Blog de copias de seguridad y recuperación > ¿Cómo hacer una copia de seguridad de la base de datos MySQL? Soluciones de respaldo de base de datos de MySQL.

¿Cómo hacer una copia de seguridad de la base de datos MySQL? Soluciones de respaldo de base de datos de MySQL.

Actualizado 6th octubre 2022, Rob Morrison

La necesidad de realizar copias de seguridad de las bases de datos MySQL no es tan universal como la de las copias de seguridad periódicas de los usuarios finales, pero cuando se requiere, se convierte en una parte especialmente importante de la infraestructura de una empresa. El módulo de Bacula Enterprise para las copias de seguridad de MySQL permite a los usuarios realizar copias de seguridad de las bases de datos MySQL -y, lo que es más importante, restauraciones- de forma eficaz y sencilla en muy poco tiempo. Esto, por supuesto, es crítico para cumplir con cualquier RTO (objetivo de tiempo de recuperación). Este artículo profundiza en la propia naturaleza de un proceso de copia de seguridad automática de MySQL, incluyendo enfoques gratuitos y de pago para la copia de seguridad y la recuperación, y diferentes opciones de personalización.

Diferentes formas de crear una copia de seguridad de la base de datos MySQL

Antes de pasar a la solución de Bacula Enterprise, vamos a repasar algunas de las diferentes formas menos convencionales de crear una copia de seguridad de la base de datos MySQL.

1. Copia de seguridad automática de la base de datos MySQL basada en Linux

Una cierta utilidad basada en Linux/Unix bajo el nombre de cron puede realizar copias de seguridad de MySQL en esos sistemas. Es una utilidad relativamente sencilla que se inicia con el sistema y lee sus instrucciones de un archivo específico. Este archivo de configuración suele almacenarse en el /etc/crontab. He aquí un ejemplo de una copia de seguridad diaria fijada a las 2:30 AM:

 

30 2 * * * root mysqldump -u root -pPASSWORD –all-databases | gzip >
/mnt/disk2/database_`data ‘ %m-%d-%Y’`.sql.gz

Los primeros cinco dígitos del comando representan la hora y la fecha (minutos, horas, días del mes, meses, días de la semana, respectivamente), y poner «*» en lugar de uno de esos números significa que cualquier número funciona.

2. Uso de PHP para crear un archivo XML

También es posible recrear su base de datos como un archivo XML, con la ayuda del PHP. No es el formato más seguro del mundo cuando se trata de restaurar sus datos, pero algunas personas lo prefieren sobre cualquier otro. Este fragmento de código de abajo debería permitirle exportar una base de datos específica en el archivo con formato .XML:

 

//connect
$link = mysql_connect($host,$user,$pass);
mysql_select_db($name,$link);

//get all the tables
$query = ‘SHOW TABLES FROM ‘.$name;
$result = mysql_query($query,$link) or die(‘cannot show tables’);
if(mysql_num_rows($result))
{
            //prep output
            $tab = «\t»;
            $br = «\n»;
            $xml = ‘<?xml version=»1.0″ encoding=»UTF-8″?>’.$br;
            $xml.= ‘<database name=»‘.$name.'»>’.$br;            

            //for every table…
            while($table = mysql_fetch_row($result))
            {
                        //prep table out
                        $xml.= $tab.'<table name=»‘.$table[0].'»>’.$br;                       

                        //get the rows
                        $query3 = ‘SELECT * FROM ‘.$table[0];
                        $records = mysql_query($query3,$link) or die(‘cannot select from table: ‘.$table[0]);                       

                        //table attributes
                        $attributes = array(‘name’,’blob’,’maxlength’,’multiple_key’,’not_null’,’numeric’,’primary_key’,’table’,’type’,’default’,’unique_key’,’unsigned’,’zerofill’);
                        $xml.= $tab.$tab.'<columns>’.$br;
                        $x = 0;
                        while($x < mysql_num_fields($records))
                        {
                                    $meta = mysql_fetch_field($records,$x);
                                    $xml.= $tab.$tab.$tab.'<column ‘;
                                    foreach($attributes as $attribute)
                                    {
                                               $xml.= $attribute.’=»‘.$meta->$attribute.'» ‘;
                                    }
                                    $xml.= ‘/>’.$br;
                                    $x++;
                        }
                        $xml.= $tab.$tab.'</columns>’.$br;                       

                        //stick the records
                        $xml.= $tab.$tab.'<records>’.$br;
                        while($record = mysql_fetch_assoc($records))
                        {
                                    $xml.= $tab.$tab.$tab.'<record>’.$br;
                                    foreach($record as $key=>$value)
                                    {
                                               $xml.= $tab.$tab.$tab.$tab.'<‘.$key.’>’.htmlspecialchars(stripslashes($value)).'</’.$key.’>’.$br;
                                    }
                                    $xml.= $tab.$tab.$tab.'</record>’.$br;
                        }
                        $xml.= $tab.$tab.'</records>’.$br;
                        $xml.= $tab.'</table>’.$br;
            }
            $xml.= ‘</database>’;           

            //save file
            $handle = fopen($name.’-backup-‘.time().’.xml’,’w+’);
            fwrite($handle,$xml);
            fclose($handle);
}

3. Utilizar PHP como método de copia de seguridad en primer lugar

Una forma más de utilizar PHP para sus necesidades de copia de seguridad es tomar una consulta de copia de seguridad de la base de datos de un archivo PHP y utilizarla. La consulta en el siguiente ejemplo es SELECT INTO OUTFILE.

 

<?php
include ‘config.php’;
include ‘opendb.php’; 

$tableName  = ‘mypet’;
$backupFile = ‘backup/mypet.sql’;
$query      = «SELECT * INTO OUTFILE ‘$backupFile’ FROM $tableName»;
$result = mysql_query($query); 

include ‘closedb.php’;
?>

Y, por supuesto, también necesitará una forma de restaurar ese tipo de copia de seguridad. Aquí está la consulta para eso, es la de LOAD DATA INFILE:

 

<?php
include ‘config.php’;
include ‘opendb.php’; 

$tableName  = ‘mypet’;
$backupFile = ‘mypet.sql’;
$query      = «LOAD DATA INFILE ‘backupFile’ INTO TABLE $tableName»;
$result = mysql_query($query); 

include ‘closedb.php’;
?>

4. Copia de seguridad mediante SSH

Hacer una copia de seguridad mediante SSH es factible incluso para una(s) base(s) de datos MySQL particularmente grande(s). En su panel Plesk, comience habilitando el acceso al shell y luego utilice cualquier herramienta que pueda acceder al servidor en cuestión vía SSH (PuTTY o una herramienta similar). Sin embargo, primero tendrá que especificar un directorio de destino para su futura copia de seguridad:

 

CD wwwroot/dbbackup

Y luego utilizará mysqldump para exportar su base de datos en un archivo específico dentro de un servidor:

 

mysqldump –add-drop-table -u db_username -p db_name > mybackup.sql

5. Script de Shell del servidor para hacer una copia de seguridad de una base de datos MySQL a través de Ubuntu

Si tiene un servidor VPS dedicado con Ubuntu Linux a bordo, tiene una opción más. Puede utilizar un script de shell específico para hacer una copia de seguridad de todas sus bases de datos en su servidor FTP. Aquí tiene un ejemplo:

 

#!/bin/bash
### MySQL Server Login Info ###
MUSER=»root»
MPASS=»MYSQL-ROOT-PASSWORD»
MHOST=»localhost»
MYSQL=»$(which mysql)»
MYSQLDUMP=»$(which mysqldump)»
BAK=»/backup/mysql»
GZIP=»$(which gzip)»
### FTP SERVER Login info ###
FTPU=»FTP-SERVER-USER-NAME»
FTPP=»FTP-SERVER-PASSWORD»
FTPS=»FTP-SERVER-IP-ADDRESS»
NOW=$(date +»%d-%m-%Y»)

### See comments below ###
### [ ! -d $BAK ] && mkdir -p $BAK || /bin/rm -f $BAK/* ###
[ ! -d «$BAK» ] && mkdir -p «$BAK»

DBS=»$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse ‘show databases’)»
for db in $DBS
do
FILE=$BAK/$db.$NOW-$(date +»%T»).gz
$MYSQLDUMP -u $MUSER -h $MHOST -p$MPASS $db | $GZIP -9 > $FILE
done 

lftp -u $FTPU,$FTPP -e «mkdir /mysql/$NOW;cd /mysql/$NOW; mput /backup/mysql/*; quit» $FTPS

Una vez que haya guardado este segmento como un archivo .sh, el siguiente paso es configurar el nivel de permiso correcto para este archivo específico:

 

$ chmod +x /home/your-name/mysql.backup.sh

A partir de ahora puede introducir uno de los dos comandos para iniciar el proceso de copia de seguridad:

 

/home/your-name/mysql.backup.sh

O:

 

sudo /home/your-name/mysql.backup.sh

También puede configurar este script para que se ejecute como un trabajo cron. Aquí hay un ejemplo de la secuencia de comandos que se ejecuta diariamente a medianoche, consiste en dos solicitudes de comandos diferentes:

 

$ sudo crontab -e

Y:

 

@midnight /home/you/mysql.backup.sh >/dev/null 2>&1

También es posible que estos scripts funcionen con diferentes distribuciones de UNIX o Linux.

6. Uso de phpMyAdmin

phpMyAdmin es una herramienta de código abierto que también es gratuita, y funciona tanto con bases de datos MySQL como MariaDB. El orden correcto de las entradas es el siguiente:

  • Abra la herramienta en cuestión;
  • Seleccione la base de datos de la que desea crear una copia de seguridad;
  • Elija la opción «export» en la barra de navegación;
  • Haga clic en la línea «display all possible options»;
  • Elija las tablas específicas que desea ver respaldadas;
  • Cambie el tipo de compresión (o déjelo en gzipped, se recomienda hacerlo);
  • Inicie la copia de seguridad haciendo clic en el botón «go»

Con esto concluye nuestra lista de las opciones de copia de seguridad más relativamente populares para sus necesidades básicas de copia de seguridad de bases de datos MySQL.

El propósito del módulo de copia de seguridad de MySQL con Bacula Enterprise

El propósito general del módulo de copia de seguridad de MySQL de Bacula Enterprise es automatizar los procesos de copia de seguridad y restauración. Al utilizar este módulo, el administrador de las copias de seguridad no tiene que conocer todos los entresijos de las técnicas de copia de seguridad de MySQL y tampoco es necesario tener conocimientos de escritura de scripts. El módulo en sí es capaz de realizar una variedad de funciones diferentes, incluyendo la copia de seguridad automática para los archivos de configuración y otros datos importantes del sistema. Hay dos métodos principales de copia de seguridad: volcado y binario.

¿Binario o volcado?

Dado que existen dos técnicas principales de copia de seguridad, es mejor presentar una comparación directa de algunas de sus características en una tabla a continuación.

Capacidades Binario Dump
Restauración de un solo objeto No Sí*
Tamaño de la copia de seguridad Grande Pequeño
Velocidad de la copia de seguridad Rápido Lento
Reducir la velocidad Rápido Muy lento
Capaz de restaurar en cualquier momento
Soporte para los tipos de copia de seguridad diferencial e incremental
Consistencia
Seguridad en línea
Restauración a la versión mayor anterior de MySQL No Sí**
Restauración a la versión mayor más reciente de MySQL No

* Se requiere la edición manual de un archivo de volcado para realizar una restauración de un solo objeto.

** Puede ser necesaria la edición manual del archivo SQL para restaurar un volcado SQL a una versión anterior de MySQL si está utilizando características que no están disponibles en la versión anterior. En general, la restauración a una versión más antigua de MySQL no está garantizada y no está soportada.

Cómo funciona: Modo binario

El principio de funcionamiento principal del modo binario es su interacción con Percona XtraBackup, que le permite realizar el proceso de copia de seguridad sin detenerlo para empezar. Es capaz de trabajar con InnoDB, XtraDB, MyISAM y otras tablas con MySQL sin modificar, o con un servidor Percona con XtraDB.

Anteriormente había dos formas principales de realizar una copia de la base de datos. La primera implicaba copiar la base de datos activa, y este método tenía una probabilidad bastante alta de tener todo tipo de discrepancias en la copia, o simplemente podía perderse todos los cambios ocurridos en la base de datos durante el tiempo en que se creaba la copia. La segunda implicaba detener por completo la base de datos para hacer una copia consistente. Pero el problema con la segunda forma es que potencialmente (y normalmente) cada segundo de la base de datos de una empresa que no funciona representa una pérdida de ingresos, no importa lo pequeño que sea ese periodo de parada.

Precisamente para este propósito, el módulo MySQL Percona de Bacula y la herramienta Percona XtraBackup ofrecen una solución eficaz a este problema al tener la capacidad de crear copias de seguridad completas o incrementales de cualquier tipo de bases de datos MySQL en funcionamiento y activas. Una ventaja más del modo conectado a Percona es que no necesita utilizar grandes archivos temporales que son los duplicados de los datos que se están respaldando o restaurando.

El proceso de restauración es relativamente sencillo, ya que los datos se restauran en una ubicación temporal y luego se modifican para que sean coherentes con la ayuda de la función «preparar». Esta función, con otras soluciones, consumiría muchos recursos y no es algo que se quiera realizar durante una situación de recuperación urgente. Por lo tanto, para evitar añadir mucho tiempo al proceso de restauración, la función «preparar» de Bacula se realiza automáticamente y por adelantado, justo después de crear la copia de seguridad. Esto añade un ligero tiempo al proceso de copia de seguridad, pero hace que el proceso de restauración sea mucho más rápido. En caso de emergencia, el tiempo de restauración es mucho más crítico que el de la copia de seguridad. Y en una situación en la que la base de datos en cuestión es una base de datos extremadamente grande y con muchas transacciones, esta diferencia de tiempo puede ser incluso la diferencia entre la capacidad de una organización para seguir funcionando.

La necesidad de esta combinación del módulo Bacula Enterprise MySQL Percona y las herramientas Percona proviene de la problemática existencia del MySQL tradicional. El principal problema de crear un «mysqldump» es que no se trata de una verdadera copia de seguridad binaria de los datos, todo el proceso consiste en convertir la base de datos completa en la gran cantidad de sentencias SQL y procesarlas después como parte del proceso de restauración. Este proceso, tal y como es, se vuelve extremadamente lento cuanto más grande sea su base de datos.

Las herramientas Percona resultan útiles cuando hay una situación que supone una gran carga para MySQL en general y se necesita tanto rendimiento como estabilidad para que el sistema funcione correctamente.

Cualquier empresa que necesite restaurar su servidor averiado de forma segura y rápida para proteger su negocio de un fallo grave, o incluso de ir a la quiebra, puede aprovechar esta combinación especial de herramientas de Percona con las capacidades de Bacula para que el proceso de restauración sea lo más rápido posible en un entorno empresarial.

Cómo funciona: Modo de volcado

El modo Dump es más o menos la opción de copia de seguridad «legacy» que sigue siendo relevante en casos específicos. Se basa en los archivos de registro que se crean en el proceso de existencia de la base de datos MySQL, y esos registros son utilizados por el sistema de recuperación puntual para realizar varias hazañas con sus datos, como la replicación, la protección, etc.

El método de copia de seguridad por defecto consiste en volcar cada una de sus bases de datos por separado, lo que significa que sus datos no serán completamente consistentes si restaura varias bases de datos de las que se hizo una copia de seguridad en diferentes periodos de tiempo y que no tienen consistencia entre sí. Esto es un problema importante si está trabajando con varias bases de datos a la vez, y la solución de Bacula para ello es guardar los archivos de registro que se generan durante cada uno de los procesos de copia de seguridad y luego reproducir esos archivos para asegurarse de que todas las bases de datos son globalmente consistentes entre sí a la vez.

También existe otra solución, más global, para el problema: la opción all_databases. Permite volcar todas las bases de datos a la vez, lo que le permite estar seguro de que sus bases de datos son consistentes y puede realizar múltiples copias de seguridad incrementales después de esta completa sin miedo a la inconsistencia global.

Hay una lista específica de archivos que el agente de MySQL genera en el catálogo de Bacula para una única «test» de su base de datos. Puede ver esas entradas de archivos y para qué se necesitan en la tabla siguiente.

Nombre del archivo Aparato Descripción
global-grants.sql global Lista unificada que especifica todos los usuarios, sus contraseñas y otros datos específicos
createdb.sql base de datos Script sobre la creación de la base de datos
grants.sql base de datos Una lista que especifica cada usuario que está asociado a esta base de datos
data.sql base de datos Los datos de su base de datos en formato de volcado
settings.txt global Variables actuales del servidor MySQL
schema.sql base de datos Script sobre la creación del esquema de la base de datos
my.cnf global Datos de configuración del servidor para MySQL

Modos de restauración de MySQL

El agente de MySQL de Bacula es capaz de proporcionar varios modos de restauración diferentes, como:

  • Restauración de una sola base de datos;
  • Restauración de registros binarios o de volcado;
  • Restauración puntual;
  • Restauración de usuarios y roles.

Como se ha mencionado, Bacula Enterprise utiliza herramientas Percona con su agente MySQL para restaurar cualquier información sobre una copia de seguridad en modo binario.

Conclusión

La nueva tecnología en todos los entornos aII se desarrolla constantemente. Por esa razón, la mayoría de las empresas se benefician de una solución de copia de seguridad que innove con regularidad y se asegure de poder cubrir todo tipo de tecnologías en un departamento de TI o centro de datos, ya sean nuevas o antiguas.  El resultado de utilizar una solución de copia de seguridad moderna e innovadora suele ser el de unos RTO y RPO más cortos, un menor mantenimiento, menores costes y una seguridad mucho mayor. Bacula Enterprise es un buen ejemplo de este tipo de proveedor de soluciones de copia de seguridad.

Sobre el autor
Rob Morrison
Rob Morrison es el director de marketing de Bacula Systems. Comenzó su carrera de marketing de TI con Silicon Graphics en Suiza, desempeñando con fuerza varios puestos de gestión de marketing durante casi 10 años. En los siguientes 10 años, Rob también ocupó varios puestos de gestión de marketing en JBoss, Red Hat y Pentaho, asegurando el crecimiento de la cuota de mercado de estas conocidas empresas. Se graduó en la Universidad de Plymouth y tiene una licenciatura en Medios Digitales y Comunicaciones, y completó un programa de estudios en el extranjero.
Deja un comentario

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