systemadmin.es > DBA > Recuperación parcial de una base de datos InnoDB desde snapshot

Recuperación parcial de una base de datos InnoDB desde snapshot

Para los backups de MySQL en Linux, la solución más común es el uso de snapshots LVM mediante mylvmbackup. La recuperación total resulta tan fácil como recuperar todo el datadir. Veremos como hacer una recuperación de una tabla InnoDB en caliente.

Estas operaciones las hacemos suponiendo el parámetro innodb_file_per_table habilitado:

mysql> SHOW VARIABLES like '%file_per%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    |
+-----------------------+-------+
1 row in set (0.00 sec)

Imaginemos que queremos recuperar de la base de datos jordi la tabla page. Primero de todo tenemos que deshacernos de los datos actuales. Lo haremos con un discard tablespace:

mysql> ALTER TABLE jordi.page DISCARD TABLESPACE;
Query OK, 0 rows affected (0.02 sec)

Esta operación destruye el contenido, por lo que conviene hacer una cópia del fichero .ibd presente en el datadir del MySQL:

# ps -fea | grep "mysqld " | grep -v grep | sed 's/^.*datadir=//ig' | awk '{ print $1 }'
/var/mysql
# cp -pr /var/mysql/jordi/page.ibd /var/mysql/jordi/backup.page.ibd
# ls /var/mysql/jordi/
backup.page.ibd  db.opt  page.frm  page.ibd

Restauramos el fichero .ibd desde la copia de seguridad con los permisos adecuados, por ejemplo:

-rw-rw----  1 mysql root    9030 Dec 24 09:19 page.frm
-rw-rw----  1 mysql root  147456 Dec 24 09:24 page.ibd

A continuación importamos el tablespace recuperado mediante:

mysql> ALTER TABLE jordi.page IMPORT TABLESPACE;
Query OK, 0 rows affected (0.02 sec)

Con esto ya tenemos hecha la recuperación parcial de una base de datos MySQL

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>