Está en la página 1de 22

Caso prctico: backup

incremental de tablas InnoDB


Vamos a hacer un backup de una BBDD
InnoDB tal que:
Sea incremental
Conserve un historial de versiones
Local o remoto
No sea necesario detener el servidor
No sea necesario bloquear las tablas
Caso prctico: backup
incremental de tablas InnoDB
Prerequisitos
LVM2
$ sudo apt-get install lvm2
rdiff-backup
$ sudo apt-get install rdiff-backup
Caso prctico: backup
incremental de tablas InnoDB
Modificaciones de la BBDD
Migrar el archivo de datos a un volumen LVM
Caso prctico: backup
incremental de tablas InnoDB
Logical Volume Manager (LVM)
Abstraccin del almacenamiento en disco
Mucha ms flexibilidad para gesitonar particiones
Permite hacer instantneas de un volumen
Caso prctico: backup
incremental de tablas InnoDB
Logical Volume Manager (LVM)
Resumen conceptual:
En vez de discos duros, la entidad de almacenamiento
de LVM son los grupos
A un grupo se le asignan (a voluntad) particiones
(/dev/hd_N, /dev/sd_N, ..)
El grupo trata el espacio total de todas sus
particiones como una piscina de bloques
Dentro de el grupo se pueden crear volmenes a los
que se les asigna:
Un tamao (menor o igual al espacio total del grupo)
Un nodo en /dev/<nombre_grupo>/<nombre_volumen>
Caso prctico: backup
incremental de tablas InnoDB
Logical Volume Manager (LVM)
Montndolo en la mquina virtual:
Crear dos discos duros nuevos
Inicializarlos para LVM
# pvcreate /dev/hd_
# pvcreate /dev/hd_
Crear un grupo LVM
# vgcreate grupo1 /dev/hdd /dev/hdb
Crear un nuevo volumen LVM
# lvcreate -L<numeroMb> -ndatos_mysql
# mkfs.ext2 /dev/grupo1/datos_mysql
Caso prctico: backup
incremental de tablas InnoDB
Logical Volume Manager (LVM)
Si da error, ejecutar:
# vgchange -a y grupo1
Creamos un directorio y montamos el volumen lgico
# mkdir /ruta/a/directorio
# mount -t ext2 /dev/grupo1/datos_mysql
Parar el servdior, copiar el contenido del directorio de
datos al directorio que hemos creado, ajustar los
permisos y rearrancar el servidor especificando el
nuevo directorio de datos
Caso prctico: backup
incremental de tablas InnoDB
Ms informacin sobre LVM
http://www.tldp.org/HOWTO/LVM-HOWTO/
Caso prctico: backup
incremental de tablas InnoDB
rdiff-backup
Programa de backup incremental de ficheros
es de uso general, no especfico para BBDD
Nos permite
Copiar solo las modificaciones desde el ltima backup
Guardar un historial de versiones del directorio
Hacer la copia a travs de red
Caso prctico: backup
incremental de tablas InnoDB
rdiff-backup
Sintaxis
rdiff-backup [opciones] <origen> <destino>
Caso prctico: backup
incremental de tablas InnoDB
Ejemplo de uso de rdiff-backup
$ mkdir origen
$ dd if=/dev/zero of=origen/ceros bs=1k
count=10000
$ rdiff-backup origen copia
La primera vez hace una copia total del origen
Volvemos a ejecutar
$ rdiff-backup origen copia
$ du -bsh origen copia
Ocupan lo mismo = la segunda vez no ha copiado nada
Caso prctico: backup
incremental de tablas InnoDB
Ejemplo de uso de rdiff-backup
$ cat <<EOF >origen/fichero.txt
> fichero de texto
> primera version
> EOF
$ rdiff-backup origen copia
$ cat <<EOF >>origen/fichero.txt
> modificaciones en el fichero
> segunda version
> EOF
$ rdiff-backup origen copia
Caso prctico: backup
incremental de tablas InnoDB
Ejemplo de uso de rdiff-backup
$ rm origen/fichero.txt
$ rdiff-backup -r now copia/fichero.txt
origen/fichero.txt
$ cat origen/fichero.txt
Listado de versiones anteriores
$ rdiff-backup -l copia
Restaurar una version anterior
$ rdiff-backup -r 1B --force copia/fichero.txt
origen/fichero.txt
$ cat origen/fichero.txt
Caso prctico: backup
incremental de tablas InnoDB
Ms informacin sobre rdiff-backup
$ man rdiff-backup
Caso prctico: backup
incremental de tablas InnoDB
Instantneas LVM
Una copia lgica de un volumen entero en un
instante de tiempo
Mecanismo de copia en escritura = Solo almacena los
cambios que se realicen en el volumen original desde
que se creo la instantnea
Caso prctico: backup
incremental de tablas InnoDB
Ejemplo de uso de las instantneas LVM
Con MySQL corriendo sobre el directorio de datos
en el volumen LVM:
Crear una BBDD o una tabla
# lvcreate -L50M -s -n instantanea
/dev/grupo1/datos_mysql
# mkdir instantanea
# mount -t ext2 /dev/grupo1/instantanea
./instantanea
Borrar la BBDD o la tabla que habamos creado
Reiniciar el servidor indicandole que use el directorio
instantanea como directorio de datos (ajustar
permisos)
Comprobar que la instantnea no se ha modificado
Caso prctico: backup
incremental de tablas InnoDB
Ejemplo de uso de las instantneas LVM
Para borrar la instantnea
Parar el servidor
# umount /dev/grupo1/instantanea
# lvremove /dev/grupo1/instantanea
Caso prctico: backup
incremental de tablas InnoDB
Notas sobre las instantneas LVM
Hay que crearlas con espacio suficiente para
almacenar las modificaciones que se realicen en
el volumen original desde que fueron creadas
SI SE QUEDA SIN ESPCIO SE CORROMPE
Mientras existen, puede disminuir el rendimiento
de escritura en el volumen original
Caso prctico: backup
incremental de tablas InnoDB
Visin general del procedimiento
[bloquear las tablas a copiar para lectura]
Hacer una instantnea del directorio de datos de
MySQL
Backup incremental con rdiff-backup desde la
instantnea
Eliminar la instantnea
Caso prctico: backup
incremental de tablas InnoDB
Restauracin
Si es posible parar el servidor mientras se
restaura
Simplemente restaurar el directorio de datos con rdiff-
backup
En caso contrario
Hacer una instantnea del directorio de datos
Correr el servidor con la instantnea como directorio
de datos mientras se realiza la restauracin
Reiniciar el servidor
Caso prctico: backup
incremental de tablas InnoDB
Bloquear o no bloquear las tablas antes de
hacer la instantnea
El bloqueo se hara as:
mysql> FLUSH TABLES WITH READ LOCK;
Mantener la conexin abierta mientras se hace la
instantnea
mysql> UNLOCK TABLES;
Caso prctico: backup
incremental de tablas InnoDB
Bloquear o no bloquear las tablas
Bloquear
Garantiza la consistencia de los archivos en el disco =
el sistema tambin es vlido para tablas MyISAM
Se puede tardar bastante en obtener el bloqueo
No bloquear
No se interfiere con el funcionamiento del servidor
InnoDB = ACID = sabe cmo recuperarse aunque la
instantnea se haya hecho mientras haba sentencias
ejecutndose (siempre que se haga backup de los
archivos de registro)
La BBDD 'mysql' se puede corromper (tablas MyISAM)