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)