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
Relacionados
Imprimir
Deja un comentario: