systemadmin.es > Backup > Backups en caliente de MySQL usando snapshots de LVM

Backups en caliente de MySQL usando snapshots de LVM

De todos es conocio el gran impacto que tiene hacer un backup sobre una base de datos MySQL mediante mysqldump por la gran cantidad de bloqueos que provoca.

Para poder hacer un backup físico en caliente, para minimizar los bloqueos al hacer el backup, de las bases de datos MySQL se deberian ejecutar estos comandos:

mysql> FLUSH TABLES;
mysql> FLUSH TABLES WITH READ LOCK;
$ lvcreate -L16G -s -n mysql.snap /dev/local/mysql
mysql> UNLOCK TABLES;

Esto crearía un snapshot del volumen lógico “mysql”, que es donde deberían estar los datafiles, llamado
“mysql.snap”.

Mediante este snapshot ser podría levantar otro MySQL para hacer un backup lógico, o simplemente copiar los datafiles.

Para automatizar esta tarea ya existe un script llamado mylvmbackup que lo facilita.

Una vez bajado y instalado solo hace falta editar el fichero de configuración /etc/mylvmbackup.conf con los detalles de nuestra plataforma.

Por ejemplo en un MySQL en el que la contraseña de root se “contrasena” con los datafiles en el volume group “local” y el logical volume llamado “mysql” que queremos que creen un snapshot llamado “mysql.snap” con 2GB de margen de cambios con el original.

El snapshot se montaria en /var/tmp/mylvmbackup/mnt/ y los backups quedarían comprimidos con tar.gz en /var/tmp/mylvmbackup/backup/

El ficher quedaría así:

[mysql]
user=root
password=contrasena
host=localhost
port=3306
socket=
mycnf=/etc/my.cnf

[lvm]
vgname=local
lvname=mysql
backuplv=mysql.snap
lvsize=2G

[fs]
xfs=0
mountdir=/var/tmp/mylvmbackup/mnt/
backupdir=/var/tmp/mylvmbackup/backup/
relpath=

[tools]
lvcreate=/usr/sbin/lvcreate
lvremove=/usr/sbin/lvremove
lvs=/usr/sbin/lvs
mount=/bin/mount
tar=/bin/tar
rsync=/usr/bin/rsync
umount=/bin/umount

[misc]
backuptype=tar
prefix=backup
tararg=cvzf
tarsuffixarg=
rsyncarg=-avWP
datefmt=%Y%m%d_%H%M%S
innodb_recover=0
pidfile=/var/tmp/mylvmbackup_recoverserver.pid
skip_flush_tables=0
extra_flush_tables=0
skip_mycnf=0
hooksdir=/usr/share/mylvmbackup
skip_hooks=0
keep_snapshot=0

[logging]
log_method=console
syslog_socktype=native
syslog_facility=
syslog_remotehost=

2 comments to “Backups en caliente de MySQL usando snapshots de LVM”

  1. Y se podria hacer tambien un tar en lugar del lvcreate?

  2. Si te refieres a hacer un tar del datadir, siempre que hagas previamente el flush tables with read lock; no hay problema. La ventaja de usar los snapshots LVM es que mientras haces el tar la base de datos sigue activa, mientras que sin el snapshot la base de datos se mantiene bloqueada en solo lectura.

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>