Blog de Gonzalo

COPIAS DE SEGURIDAD INCREMENTALES EN MYSQL

Hace un tiempo hablé de las copias de seguridad en mysql, en las que se crea un fichero sql con todas las tablas y los datos de la base de datos de la que se ha hecho copia de seguridad. Cada vez que se ejecute el comando para las copias de seguridad creará un fichero sql con los datos que había antes y con los nuevos. Pero también se pueden hacer copias de seguridad incrementales en mysql y vamos a ver como.
Pero primero ¿Que es una copia de seguridad incremental? La copia de seguridad incremental permite guardar únicamente los datos que han sido modificados desde la última copia. La copia de seguridad incremental es el modelo más avanzado de backup disponible.

Pasos de la copia incremental

  • Primero se realiza una copia de seguridad completa. Es un respaldo de todos los archivos y carpetas.
  • Luego , se realiza una copia incremental propiamente dicha en la que solamente solo se incluyen aquellos archivos cuya hora y fecha de modificación haya cambiado desde la copia completa.
  • Finalmente, se pueden repetir otras copias incrementales las veces que se desee, cada una de las cuales contendrá únicamente los datos que han sido modificados desde la anterior copia incremental.

Ventajas

  • Es un proceso rápido, ya que se realiza el respaldo solamente de los datos modificados desde la última copia.
  • Necesita poco espacio de almacenamiento, con respecto a las demás tipologías de backup.
  • Finalmente, se puede realizar con la frecuencia deseada, lo que nos permite disponer de un historial de versiones de los archivos, para recuperar posteriormente las que nos interesan.

Desventajas

  • La restauración de los datos consume mucho tiempo, ya que es necesario recurrir a todas las copias incrementales realizadas a partir de una copia completa, para recuperar la totalidad de datos.
  • Ofrece un menor nivel de protección de datos, ya que un error en una copia incremental concreta puede comprometer todo el proceso de restauración.
  • Se copian archivos cuya fecha se haya modificado aunque su contenido sea el mismo.

Como realizar las copias de seguridad incrementales

Ahora voy a explicar como realizar las copias de seguridad incrementales paso a paso.
  • Editar el fichero my.cnf y añadir las líneas:
    
    //ruta donde se guardaran los logs
    log_bin = /var/log/mysql/mysql-bin.log
     se borraran los archivos log despues de 10 dias
    expire_logs_days = 10
    
    
  • Se crea la Base de Datos para prueba
    
    CREATE DATABASE `backup`;
    USE backup;
    CREATE TABLE `clientes`(
        `iCliente` INT NOT NULL AUTO_INCREMENT,
        `Cliente` VARCHAR(45) NOT NULL DEFAULT '',
        PRIMARY KEY(`iCliente`)
    ) ENGINE InnoDB;
    
  • Se inserta un registro de prueba:
    
    USE backup;
    INSERT INTO clientes(Cliente)VALUES('Ana Silva');
    
  • Se hace el primer backup completo con mysqldump
    
    //Yo he probado en windows tuve quitar el -p por la autenticación. No me valia la de mysql
    mysqldump -uroot -p --single-transaction --flush-logs --master-data=2 backup > full_backup.sql
    
    --single-transaction hace un dump de las tablas innoDB en un estado consistente,--flush-logs cerrará los logs actuales y abrirá uno nuevo, --master-data=2 escribirá comentarios en el archivo dump sobre las posiciones de los logs. Si revisais el directorio de logs de mysql, especificado en el fichero my.cnf, aparecerá un nuevo archivo mysql-bin.000002 y todos los cambios y transacciones se habrán grabado en ese archivo, y la siguiente vez que se ejecute un flush-logs o se reinicie el servidor de MySQL se creara el archivo mysql-bin.000003 y así sucesivamente.
  • Se insertan insertamos mas registros
    
    USE backup;
    INSERT INTO clientes(Cliente)VALUES('Adriana Pastor');
    INSERT INTO clientes(Cliente)VALUES('Silvia Alonso');
Si se hace un flush a los logs, con esto se creara un nuevo archivo mysql-bin.000003, es como un corte, a partir de este momento cualquier cambio se estara almacenando en mysql-bin.000003, pero los cambios anteriores al flush estaran en mysql-bin.000002.

Restaurar un binary log

Ahora voy a explicar como restaurar los respaldos incrementales.
  • Borrar la base de datos anterior, y volverla a crear para poder ver las diferentes restauraciones de los datos
  • Lanzar el comando:
    
    //Este comando restaura lo primer dump que se hizo
    mysql -uroot -p backup < full_backup.sql
    
    
  • Lanzar el comando:
    
    //Este comando restaura el fichero de respaldo que se especifica
    //Nota: Estoy probando el windows yo he tenido que poner la ruta. En linux no es necesario.
    mysqlbinlog C:\xampp\mysql\data\mysql-bin.000005 | mysql -uroot  backup
    
    
  • Compartir en twitter