Copia de Seguridad · 7 min read · Dec 10, 2025

Cómo hacer una copia de seguridad de bases de datos MySQL con mylvmbackup en Debian Squeeze

mylvmbackup es un script de Perl para crear copias de seguridad de MySQL rápidamente. Utiliza la función de instantánea de LVM para hacerlo. Para realizar una copia de seguridad, mylvmbackup obtiene un bloqueo de lectura en todas las tablas y vacía todos los cachés del servidor en el disco, crea una instantánea del volumen que contiene el directorio de datos de MySQL y desbloquea las tablas nuevamente. Este artículo muestra cómo usarlo en un servidor Debian Squeeze.

¡No emito ninguna garantía de que esto funcione para ti!

1 Nota Preliminar

Asumo que MySQL ya está configurado y funcionando en tu sistema. El sistema debe usar LVM, y el directorio de datos de MySQL ( /var/lib/mysql) debe tener una partición LVM propia (aunque eso es opcional).

Si has leído Copia de seguridad (y restauración) de particiones LVM con instantáneas de LVM, sabes que las instantáneas de LVM requieren alguna partición LVM no utilizada para la instantánea. Mi sistema de prueba tiene un segundo disco duro, actualmente no utilizado, /dev/sdb que será utilizado por mylvmbackup para crear un volumen lógico temporal para la copia de seguridad.

Esta es mi situación actual:

root@server1:~# df -h  
Filesystem            Size  Used Avail Use% Mounted on  
/dev/mapper/server1-root  
                       20G  808M   18G   5% /  
tmpfs                 252M     0  252M   0% /lib/init/rw  
varrun                252M   56K  251M   1% /var/run  
varlock               252M     0  252M   0% /var/lock  
udev                  252M  2.6M  249M   2% /dev  
tmpfs                 252M     0  252M   0% /dev/shm  
/dev/sda1            471M   23M  425M   6% /boot  
/dev/mapper/server1-mysql  
                       8.9G  170M  8.3G   2% /var/lib/mysql  
root@server1:~#

Como ves, tengo dos particiones LVM, / y /var/lib/mysql (más una partición de intercambio LVM que no se muestra aquí). El grupo de volúmenes se llama server1, y los volúmenes se llaman swap, root y mysql:

root@server1:~# pvdisplay  
  --- Physical volume ---  
  PV Name               /dev/sda5  
  VG Name               server1  
  PV Size               29.52 GB / not usable 3.66 MB  
  Allocatable           yes (but full)  
  PE Size (KByte)      4096  
  Total PE              7557  
  Free PE               0  
  Allocated PE          7557  
  PV UUID               0gCmpE-FGel-9ayg-E2yg-kkEu-B72X-kFvaye  
  
root@server1:~#  
  
root@server1:~# vgdisplay  
  --- Volume group ---  
  VG Name               server1  
  System ID  
  Format                lvm2  
  Metadata Areas        1  
  Metadata Sequence No  4  
  VG Access             read/write  
  VG Status             resizable  
  MAX LV                0  
  Cur LV                3  
  Open LV               3  
  Max PV                0  
  Cur PV                1  
  Act PV                1  
  VG Size               29.52 GB  
  PE Size               4.00 MB  
  Total PE              7557  
  Alloc PE / Size       7557 / 29.52 GB  
  Free  PE / Size       0 / 0  
  VG UUID               PH5Hpc-jqeP-BFYs-wWlA-hu03-qwuQ-0cNIu3  
  
root@server1:~#  
  
root@server1:~# lvdisplay  
  --- Logical volume ---  
  LV Name                /dev/server1/swap  
  VG Name                server1  
  LV UUID                RCeLCK-MO5p-xoMq-SwTT-n2NV-GaP6-GaemDp  
  LV Write Access        read/write  
  LV Status              available  
  # open                 2  
  LV Size                1.00 GB  
  Current LE            256  
  Segments               1  
  Allocation             inherit  
  Read ahead sectors     auto  
  - currently set to     256  
  Block device           254:0  
  
  --- Logical volume ---  
  LV Name                /dev/server1/root  
  VG Name                server1  
  LV UUID                5Wen7n-xYmh-MQz1-fKH5-0XXa-1y2t-V3PYbb  
  LV Write Access        read/write  
  LV Status              available  
  # open                 1  
  LV Size                19.53 GB  
  Current LE            5000  
  Segments               1  
  Allocation             inherit  
  Read ahead sectors     auto  
  - currently set to     256  
  Block device           254:1  
  
  --- Logical volume ---  
  LV Name                /dev/server1/mysql  
  VG Name                server1  
  LV UUID                wk8yb6-fDl8-4tg3-tneT-1dDe-wWdy-AfGZ5I  
  LV Write Access        read/write  
  LV Status              available  
  # open                 1  
  LV Size                8.99 GB  
  Current LE            2301  
  Segments               1  
  Allocation             inherit  
  Read ahead sectors     auto  
  - currently set to     256  
  Block device           254:2  
  
root@server1:~#

Aquí hay un resumen de mis dos discos duros:

root@server1:~# fdisk -l  
  
Disk /dev/sda: 32.2 GB, 32212254720 bytes  
255 heads, 63 sectors/track, 3916 cylinders  
Units = cylinders of 16065 * 512 = 8225280 bytes  
Disk identifier: 0x0009353f  
  
   Device Boot      Start         End      Blocks   Id  System  
/dev/sda1   *           1          62      497983+  83  Linux  
/dev/sda2              63        3916    30957255    5  Extended  
/dev/sda5              63        3916    30957223+  8e  Linux LVM  
  
Disk /dev/sdb: 10.7 GB, 10737418240 bytes  
255 heads, 63 sectors/track, 1305 cylinders  
Units = cylinders of 16065 * 512 = 8225280 bytes  
Disk identifier: 0x00000000  
  
Disk /dev/sdb doesn't contain a valid partition table  
root@server1:~#

2 Preparando /dev/sdb

Antes de que podamos crear instantáneas en /dev/sdb, debemos particionarlo (Linux LVM) y agregarlo a nuestro grupo de volúmenes ( server1).

Ahora crearé la partición /dev/sdb1 y la agregaré al grupo de volúmenes server1:

fdisk /dev/sdb

server1:~# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won’t be recoverable.

The number of cylinders for this disk is set to 1305.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:

  1. software that runs at boot time (e.g., old versions of LILO)
  2. booting and partitioning software from other OSs
    (e.g., DOS FDISK, OS/2 FDISK)
    Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): <– n
Command action
e extended
p primary partition (1-4)
<– p
Partition number (1-4): <– 1
First cylinder (1-1305, default 1): <– [ENTER]
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1305, default 1305): <– [ENTER]
Using default value 1305

Command (m for help): <– t
Selected partition 1
Hex code (type L to list codes): <– 8e
Changed system type of partition 1 to 8e (Linux LVM)

Command (m for help): <– w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

pvcreate /dev/sdb1  
vgextend server1 /dev/sdb1

Eso es todo: no necesitamos crear ningún volumen en él; esto lo hará mylvmbackup automáticamente.

3 Instalando y usando mylvmbackup

Debian Squeeze proporciona un paquete para mylvmbackup, por lo que simplemente podemos instalarlo de la siguiente manera:

apt-get install mylvmbackup

Echa un vistazo a

man mylvmbackup

para aprender cómo usarlo (lee la parte sobre tablas InnoDB cuidadosamente si estás usando InnoDB).

El archivo de configuración de mylvmbackup es /etc/mylvmbackup.conf, por lo que puedes especificar tus opciones en la línea de comandos o en ese archivo (las opciones de la línea de comandos anularán las opciones en /etc/mylvmbackup.conf).

El directorio de copia de seguridad predeterminado es /var/cache/mylvmbackup/backup (a menos que especifiques otra ubicación).

Un comando de ejemplo para hacer una copia de seguridad de tablas MyISAM sería:

mylvmbackup --user=root --password=yourrootsqlpassword --mycnf=/etc/mysql/my.cnf --vgname=server1 --lvname=mysql --backuptype=tar

Y para InnoDB:

mylvmbackup --user=root --password=yourrootsqlpassword --innodb_recover --skip_flush_tables --mycnf=/etc/mysql/my.cnf --vgname=server1 --lvname=mysql --backuptype=tar

Asegúrate de llenar la contraseña correcta, el nombre del grupo de volúmenes ( server1 aquí) y el nombre del volumen que contiene los datos de MySQL (el volumen es /dev/server1/mysql, por lo tanto el nombre es mysql).

Si todo va bien, deberías ver mucha salida:

root@server1:~# mylvmbackup --user=root --password=yourrootsqlpassword --mycnf=/etc/mysql/my.cnf --vgname=server1 --lvname=mysql --backuptype=tar  
20120416 19:16:58 Info: Connecting to database...  
20120416 19:16:58 Info: Flushing tables with read lock...  
20120416 19:16:58 Info: Taking position record...  
20120416 19:16:58 Info: Taking snapshot...  
File descriptor 3 left open  
  Logical volume "mysql_snapshot" created  
20120416 19:16:58 Info: Unlocking tables...  
20120416 19:16:58 Info: Disconnecting from database...  
20120416 19:16:58 Info: Mounting snapshot...  
20120416 19:16:59 Info: Copying my.cnf...  
20120416 19:16:59 Info: Taking actual backup...  
20120416 19:16:59 Info: Creating tar archive /var/cache/mylvmbackup/backup/backup-20120416_191658_mysql.tar.gz  
backup/  
backup/mydb/  
backup/mydb/sys_modules.MYI  
backup/mydb/dns_a.frm  
backup/mydb/isp_dienste.MYD  
backup/mydb/isp_server_ip.frm  
backup/mydb/dns_spf.frm  
backup/mydb/dns_a.MYI  
backup/mydb/isp_fakt_dep.frm  
backup/mydb/multidoc_dep.frm  
backup/mydb/isp_isp_web_template.MYI  
backup/mydb/sys_nodes.MYD  
backup/mydb/listtype.MYD  
backup/mydb/help_documents.MYD  
backup/mydb/help_tickets.MYI  
backup/mydb/doctype.frm  
backup/mydb/login.MYI  
backup/mydb/isp_com.frm  
backup/mydb/help_documents.MYI  
backup/mydb/isp_dep.MYD  
backup/mydb/help_documents.frm  
backup/mydb/isp_server.MYD  
backup/mydb/isp_fakt_nodes.MYD  
backup/mydb/sys_config.MYD  
backup/mydb/dns_nodes.MYI  
backup/mydb/sys_config.MYI  
backup/mydb/isp_monitor.frm  
backup/mydb/isp_server_ip.MYI  
backup/mydb/isp_isp_datenbank.frm  
backup/mydb/dns_secondary.frm  
backup/mydb/isp_nodes.MYI  
backup/mydb/dns_isp_dns.MYI  
backup/mydb/help_nodes.frm  
backup/mydb/isp_fakt_nodes.frm  
backup/mydb/isp_server.MYI  
backup/mydb/isp_isp_domain.frm  
backup/mydb/dns_dep.frm  
backup/mydb/session.frm  
backup/mydb/isp_isp_cron.MYD  
backup/mydb/isp_fakt_record.MYI  
backup/mydb/isp_monitor.MYI  
backup/mydb/isp_fakt_rechnung.MYI  
backup/mydb/listtype.MYI  
backup/mydb/isp_fakt_rechnung.MYD  
backup/mydb/isp_traffic.frm  
backup/mydb/isp_fakt_dep.MYI  
backup/mydb/user_groups.frm  
backup/mydb/isp_fakt_record.frm  
backup/mydb/isp_fakt_artikel.MYD  
backup/mydb/isp_htaccess.MYD  
backup/mydb/sys_nodes.frm  
backup/mydb/groups.frm  
backup/mydb/login.MYD  
backup/mydb/isp_firewall.MYD  
backup/mydb/isp_server.frm  
backup/mydb/help_tickets.frm  
backup/mydb/multidoc_dep.MYD  
backup/mydb/dns_nodes.MYD  
backup/mydb/dns_a.MYD  
backup/mydb/sys_config.frm  
backup/mydb/dns_isp_dns.frm  
backup/mydb/dns_mx.MYI  
backup/mydb/isp_isp_web.MYD  
backup/mydb/isp_serverstatus.MYI  
backup/mydb/isp_serverstatus.MYD  
backup/mydb/sys_dep.MYD  
backup/mydb/isp_isp_cron.MYI  
backup/mydb/session.MYD  
backup/mydb/isp_isp_admin.MYD  
backup/mydb/dns_ptr.frm  
backup/mydb/dns_mx.frm  
backup/mydb/isp_isp_domain.MYD  
backup/mydb/sys_dep.MYI  
backup/mydb/dns_spf.MYD  
backup/mydb/user_groups.MYD  
backup/mydb/sys_news.frm  
backup/mydb/isp_isp_actions.MYI  
backup/mydb/doctype.MYD  
backup/mydb/multidoc_nodes.frm  
backup/mydb/isp_fakt_artikel.frm  
backup/mydb/sys_news.MYD  
backup/mydb/isp_traffic.MYD  
backup/mydb/user_groups.MYI  
backup/mydb/sys_news.MYI  
backup/mydb/listtype.frm  
backup/mydb/del_status.frm  
backup/mydb/isp_fakt_nodes.MYI  
backup/mydb/isp_isp_kunde.MYD  
backup/mydb/isp_dienste.frm  
backup/mydb/dns_mx.MYD  
backup/mydb/doctype.MYI  
backup/mydb/help_tickets.MYD  
backup/mydb/dns_secondary.MYI  
backup/mydb/dns_ptr.MYD  
backup/mydb/isp_isp_reseller.frm  
backup/mydb/isp_dienste.MYI  
backup/mydb/isp_isp_datenbank.MYD  
backup/mydb/isp_isp_actions.MYD  
backup/mydb/isp_isp_web.frm  
backup/mydb/db.opt  
backup/mydb/isp_server_ip.MYD  
backup/mydb/multidoc_nodes.MYI  
backup/mydb/dns_nodes.MYD  
backup/mydb/isp_fakt_rechnung.frm  
backup/mydb/isp_isp_reseller.MYI  
backup/mydb/isp_nodes.MYD  
backup/mydb/isp_htaccess.MYI  
backup/mydb/isp_isp_web_template.frm  
backup/mydb/isp_isp_domain.MYI  
backup/mydb/dns_secondary.MYD  
backup/mydb/dns_dep.MYD  
backup/mydb/isp_firewall.MYI  
backup/mydb/help_nodes.MYI  
backup/mydb/isp_isp_admin.frm  
backup/mydb/isp_isp_cron.frm  
backup/mydb/isp_isp_datenbank.MYI  
backup/mydb/isp_traffic_ip.frm  
backup/mydb/isp_fakt_dep.MYD  
backup/mydb/isp_dep.MYI  
backup/mydb/dns_dep.MYI  
backup/mydb/isp_isp_reseller.MYD  
backup/mydb/dns_isp_dns.MYD  
backup/mydb/isp_fakt_artikel.MYI  
backup/mydb/multidoc_dep.MYI  
backup/mydb/multidoc_nodes.MYD  
backup/mydb/del_status.MYD  
backup/mydb/groups.MYD  
backup/mydb/isp_isp_web_template.MYD  
backup/mydb/isp_htaccess.frm  
backup/mydb/isp_dep.frm  
backup/mydb/isp_isp_web.MYI  
backup/mydb/isp_isp_user.frm  
backup/mydb/session.MYI  
backup/mydb/isp_isp_admin.MYI  
backup/mydb/isp_isp_kunde.MYI  
backup/mydb/isp_isp_user.MYI  
backup/mydb/isp_fakt_record.MYD  
backup/mydb/isp_nodes.frm  
backup/mydb/groups.MYI  
backup/mydb/del_status.MYI  
backup/mydb/dns_spf.MYI  
backup/mydb/isp_com.MYD  
backup/mydb/isp_isp_user.MYD  
backup/mydb/dns_cname.frm  
backup/mydb/isp_com.MYI  
backup/mydb/dns_cname.MYD  
backup/mydb/sys_modules.MYD  
backup/mydb/isp_traffic_ip.MYI  
backup/mydb/help_nodes.MYD  
backup/mydb/sys_user.frm  
backup/mydb/isp_traffic_ip.MYD  
backup/mydb/sys_user.MYD  
backup/mydb/sys_modules.frm  
backup/mydb/isp_serverstatus.frm  
backup/mydb/sys_dep.frm  
backup/mydb/isp_firewall.frm  
backup/mydb/isp_monitor.MYD  
backup/mydb/isp_isp_kunde.frm  
backup/mydb/dns_cname.MYI  
backup/mydb/isp_isp_actions.frm  
backup/mydb/sys_user.MYI  
backup/mydb/sys_nodes.MYI  
backup/mydb/dns_ptr.MYI  
backup/mydb/isp_traffic.MYI  
backup/mydb/login.frm  
backup/ib_logfile0  
backup/mysql_upgrade_info  
backup/debian-5.0.flag  
backup/mysql/  
backup/mysql/host.MYD  
backup/mysql/procs_priv.MYD  
backup/mysql/time_zone_transition.MYD  
backup/mysql/proc.MYI  
backup/mysql/time_zone_name.frm  
backup/mysql/time_zone_name.MYD  
backup/mysql/help_relation.MYI  
backup/mysql/user.MYD  
backup/mysql/help_category.MYI  
backup/mysql/time_zone.frm  
backup/mysql/func.MYD  
backup/mysql/help_category.MYD  
backup/mysql/time_zone_transition.frm  
backup/mysql/time_zone_name.MYI  
backup/mysql/help_category.frm  
backup/mysql/time_zone_leap_second.frm  
backup/mysql/time_zone_transition.MYI  
backup/mysql/help_relation.MYD  
backup/mysql/host.frm  
backup/mysql/db.frm  
backup/mysql/db.MYI  
backup/mysql/columns_priv.frm  
backup/mysql/time_zone.MYI  
backup/mysql/time_zone_leap_second.MYD  
backup/mysql/func.frm  
backup/mysql/columns_priv.MYI  
backup/mysql/help_topic.MYD  
backup/mysql/host.MYI  
backup/mysql/proc.frm  
backup/mysql/user.MYI  
backup/mysql/help_topic.MYI  
backup/mysql/help_relation.frm  
backup/mysql/tables_priv.frm  
backup/mysql/help_keyword.frm  
backup/mysql/user.frm  
backup/mysql/time_zone_transition_type.MYI  
backup/mysql/procs_priv.frm  
backup/mysql/help_topic.frm  
backup/mysql/procs_priv.MYI  
backup/mysql/time_zone_transition_type.MYD  
backup/mysql/func.MYI  
backup/mysql/proc.MYD  
backup/mysql/tables_priv.MYD  
backup/mysql/help_keyword.MYI  
backup/mysql/help_keyword.MYD  
backup/mysql/time_zone_leap_second.MYI  
backup/mysql/tables_priv.MYI  
backup/mysql/db.MYD  
backup/mysql/time_zone_transition_type.frm  
backup/mysql/time_zone.MYD  
backup/mysql/columns_priv.MYD  
backup/lost+found/  
backup/ibdata1  
backup/ib_logfile1  
backup-pos/backup-20120416_191658_mysql.pos  
backup-pos/backup-20120416_191658_my.cnf  
20120416 19:17:00 Info: DONE  
20120416 19:17:00 Info: Cleaning up...  
20120416 19:17:00 Info: LVM Usage stats:  
20120416 19:17:00 Info:   LV             VG      Attr   LSize Origin Snap%  Move Log Copy%  Convert  
20120416 19:17:00 Info:   mysql_snapshot server1 swi-a- 5.00G mysql    0.00  
  Logical volume "mysql_snapshot" successfully removed  
root@server1:~#

Después puedes encontrar la copia de seguridad en el directorio /var/cache/mylvmbackup/backup (a menos que hayas especificado otra ubicación):

ls -l /var/cache/mylvmbackup/backup
root@server1:~# ls -l /var/cache/mylvmbackup/backup  
total 248  
-rw-r--r-- 1 root root 246847 2012-04-16 19:17 backup-20120416_191658_mysql.tar.gz  
root@server1:~#

El archivo tar.gz contiene dos directorios, backup (con las bases de datos y tablas de /var/lib/mysql que puedes simplemente copiar de vuelta después de un fallo de base de datos - la base de datos debe estar detenida cuando hagas esto) y backup-pos que contiene tu archivo my.cnf (una copia de /etc/mysql/my.cnf):

cd /var/cache/mylvmbackup/backup  
tar xvfz backup-20120416_191658_mysql.tar.gz  
ls -l
root@server1:/var/cache/mylvmbackup/backup# ls -l  
total 256  
drwxr-xr-x 5 mysql mysql   4096 2012-04-16 19:10 backup  
-rw-r--r-- 1 root  root  246847 2012-04-16 19:17 backup-20120416_191658_mysql.tar.gz  
drwxr-xr-x 2 root  root    4096 2012-04-16 19:24 backup-pos  
root@server1:/var/cache/mylvmbackup/backup#

4 Enlaces

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.