systemadmin.es > DBA > xtrabackup / innobackupex: Backup y restore parcial

xtrabackup / innobackupex: Backup y restore parcial

Mediante xtrabackup también podemos realizar tanto backups como restauraciones parciales. Vamos a ver cómo hacer un backup de una base de datos en concreto y a continuación cómo realizar una restauración parcial de una tabla.

Para realizar un backup parcial de una base de datos únicamente deberemos añadir la opción –databases para indicarla, por ejemplo:

# innobackupex --databases="db2" /var/backups/xtrabackup/

InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
and Percona LLC and/or its affiliates 2009-2013.  All Rights Reserved.

This software is published under
the GNU GENERAL PUBLIC LICENSE Version 2, June 1991.

(...)
innobackupex: Backup created in directory '/var/backups/xtrabackup/2014-08-26_19-51-43'
innobackupex: MySQL binlog position: filename 'binlog.000017', position 1496, gtid_executed 25e0562c-d2ba-ee1b-7bb2-187ed507fbe2:1-7,
c19edf66-2d45-11e4-af67-080027ed4eff:1-2
140826 19:51:46  innobackupex: Connection to database server closed
140826 19:51:46  innobackupex: completed OK!

En caso de necesitar restaurar una única tabla, primero deberemos aplicar el log para aplicar transacciones a medias y hacer rollback de las no comiteadas:

# innobackupex --apply-log --export /var/backups/xtrabackup/2014-08-26_20-15-29

InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
and Percona LLC and/or its affiliates 2009-2013.  All Rights Reserved.

(...)
xtrabackup: starting shutdown with innodb_fast_shutdown = 0
InnoDB: FTS optimize thread exiting.
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 1904150
140826 20:16:41  innobackupex: completed OK!

A continación, en la base de datos deberemos descartar el tablaspace mediante un ALTER TABLE:

mysql> alter table tbl discard tablespace;
Query OK, 0 rows affected (0.00 sec)

A continuación deberemos copiar el tablespace de la tabla desde el backup con los permisos adecuados:

# cp /var/backups/xtrabackup/2014-08-26_20-15-29/db2/tbl.exp /var/backups/xtrabackup/2014-08-26_20-15-29/db2/tbl.ibd /var/lib/mysql/db2/
# chown mysql. /var/lib/mysql/db2/tbl.*

Para finalmente importar el tablespace de la tabla restaurada desde el backup mediante otro ALTER TABLE:

mysql> alter table tbl import tablespace;
Query OK, 0 rows affected, 1 warning (0.04 sec)

2 comments to “xtrabackup / innobackupex: Backup y restore parcial”

  1. Varias aclaraciones:

    El método, tal y como lo describes arriba, sólo funciona en Percona Server con la funcionalidad de transportable tablespaces activada (o en MySQL en casos muy concretos). Para usarlo en MySQL 5.6 hay que usar el otro archivo.

    “aplicar el log para aplicar transacciones a medias” por aclararlo: se hacen commit de las transacciones commiteadas durante el proceso de backup y undo de las no-commiteadas. Al hacer esto pierdes la posibilidad de hacer un rolling forward con un incremental.

    No recomiendo usar –databases, sino –include=^db[.], ya que la primera opción no funciona para datos no innodb.

  2. El método del discard funciona siempre que la instancia sea la misma y no hace falta que sea Percona Server

    Por ejemplo, podemos recuperar desde un snapshot una tabla

    La opción –databases también me ha funcionado para tablas InnoDB, quizá hablas de una versión más antigua?

    muchas gracias por tu aportación!

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>