Datenbank Backup · 7 min read · Dec 10, 2025

Wie man MySQL-Datenbanken mit mylvmbackup auf Debian Squeeze sichert

mylvmbackup ist ein Perl-Skript zum schnellen Erstellen von MySQL-Backups. Es nutzt die Snapshot-Funktion von LVM. Um ein Backup durchzuführen, erhält mylvmbackup einen Lese-Lock auf alle Tabellen und spült alle Server-Caches auf die Festplatte, erstellt einen Snapshot des Volumes, das das MySQL-Datenverzeichnis enthält, und entsperrt die Tabellen wieder. Dieser Artikel zeigt, wie man es auf einem Debian Squeeze-Server verwendet.

Ich gebe keine Garantie, dass dies bei Ihnen funktioniert!

1 Vorbemerkung

Ich gehe davon aus, dass MySQL bereits auf Ihrem System eingerichtet und aktiv ist. Das System muss LVM verwenden, und das MySQL-Datenverzeichnis (/var/lib/mysql) sollte eine eigene LVM-Partition haben (obwohl das optional ist).

Wenn Sie “LVM-Partitionen mit LVM-Snapshots sichern (und wiederherstellen)” gelesen haben, wissen Sie, dass LVM-Snapshots eine ungenutzte LVM-Partition für den Snapshot benötigen. Mein Testsystem hat eine zweite, derzeit ungenutzte Festplatte /dev/sdb, die von mylvmbackup verwendet wird, um ein temporäres logisches Volume für das Backup zu erstellen.

Das ist meine aktuelle Situation:

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:~#

Wie Sie sehen, habe ich zwei LVM-Partitionen, / und /var/lib/mysql (plus eine LVM-Swap-Partition, die hier nicht angezeigt wird). Die Volume-Gruppe heißt server1, und die Volumes heißen swap, root und mysql:

root@server1:~# pvdisplay  
  --- Physikalisches 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-Gruppe ---  
  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  
  --- Logisches 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  
  
  --- Logisches 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  
  
  --- Logisches 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:~#

Hier ist eine Übersicht über meine beiden Festplatten:

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 enthält keine gültige Partitionstabelle  
root@server1:~#

2 Vorbereitung von /dev/sdb

Bevor wir Snapshots auf /dev/sdb erstellen können, müssen wir es partitionieren (Linux LVM) und zu unserer Volume-Gruppe (server1) hinzufügen.

Ich werde jetzt die Partition /dev/sdb1 erstellen und sie zur Volume-Gruppe server1 hinzufügen:

fdisk /dev/sdb

server1:~# fdisk /dev/sdb
Device enthält weder eine gültige DOS-Partitionstabelle, noch Sun, SGI oder OSF-Disklabel
Erstelle ein neues DOS-Disklabel. Änderungen bleiben nur im Speicher,
bis Sie sich entscheiden, sie zu schreiben. Danach ist der vorherige
Inhalt natürlich nicht mehr wiederherstellbar.

Die Anzahl der Zylinder für diese Festplatte ist auf 1305 gesetzt.
Es ist nichts falsch damit, aber dies ist größer als 1024,
und könnte in bestimmten Setups Probleme verursachen mit:

  1. Software, die beim Booten läuft (z.B. alte Versionen von LILO)
  2. Boot- und Partitionierungssoftware von anderen OSs
    (z.B. DOS FDISK, OS/2 FDISK)
    Warnung: ungültige Flagge 0x0000 der Partitionstabelle 4 wird durch w(eiter) korrigiert

Befehl (m für Hilfe): <– n
Befehlsaktion
e erweiterte
p primäre Partition (1-4)
<– p
Partitionsnummer (1-4): <– 1
Erster Zylinder (1-1305, Standard 1): <– [ENTER]
Verwende den Standardwert 1
Letzter Zylinder oder +Größe oder +GrößeM oder +GrößeK (1-1305, Standard 1305): <– [ENTER]
Verwende den Standardwert 1305

Befehl (m für Hilfe): <– t
Ausgewählte Partition 1
Hex-Code (Typ L zum Auflisten der Codes): <– 8e
Änderte den Systemtyp der Partition 1 zu 8e (Linux LVM)

Befehl (m für Hilfe): <– w
Die Partitionstabelle wurde geändert!

Rufe ioctl() auf, um die Partitionstabelle erneut zu lesen.
Synchronisiere Festplatten.

pvcreate /dev/sdb1  
vgextend server1 /dev/sdb1

Das war’s - wir müssen keine Volumes darauf erstellen - das wird von mylvmbackup automatisch erledigt.

3 Installation und Verwendung von mylvmbackup

Debian Squeeze bietet ein Paket für mylvmbackup, daher können wir es einfach wie folgt installieren:

apt-get install mylvmbackup

Schauen Sie sich an

man mylvmbackup

um zu erfahren, wie man es verwendet (lesen Sie den Teil über InnoDB-Tabellen sorgfältig, wenn Sie InnoDB verwenden).

Die Konfigurationsdatei von mylvmbackup ist /etc/mylvmbackup.conf, sodass Sie entweder Ihre Optionen in der Befehlszeile oder in dieser Datei angeben können (Befehlszeilenoptionen überschreiben die Optionen in /etc/mylvmbackup.conf).

Das Standard-Backup-Verzeichnis ist /var/cache/mylvmbackup/backup (es sei denn, Sie geben einen anderen Speicherort an).

Ein Beispielbefehl zum Sichern von MyISAM-Tabellen wäre:

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

Und für InnoDB:

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

Stellen Sie sicher, dass Sie das richtige Passwort, den Namen der Volume-Gruppe (server1 hier) und den Namen des Volumes, das die MySQL-Daten enthält (das Volume ist /dev/server1/mysql, daher ist der Name mysql), eingeben.

Wenn alles gut geht, sollten Sie viele Ausgaben sehen:

root@server1:~# mylvmbackup --user=root --password=yourrootsqlpassword --mycnf=/etc/mysql/my.cnf --vgname=server1 --lvname=mysql --backuptype=tar  
20120416 19:16:58 Info: Verbindung zur Datenbank wird hergestellt...  
20120416 19:16:58 Info: Tabellen mit Lese-Lock spülen...  
20120416 19:16:58 Info: Positionseintrag erstellen...  
20120416 19:16:58 Info: Snapshot erstellen...  
Dateideskriptor 3 bleibt offen  
  Logisches Volume "mysql_snapshot" erstellt  
20120416 19:16:58 Info: Tabellen entsperren...  
20120416 19:16:58 Info: Verbindung zur Datenbank trennen...  
20120416 19:16:58 Info: Snapshot einhängen...  
20120416 19:16:59 Info: my.cnf kopieren...  
20120416 19:16:59 Info: Tatsächliches Backup erstellen...  
20120416 19:16:59 Info: Erstelle tar-Archiv /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.frm  
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.MYI  
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.MYI  
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: FERTIG  
20120416 19:17:00 Info: Aufräumen...  
20120416 19:17:00 Info: LVM-Nutzungsstatistiken:  
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  
  Logisches Volume "mysql_snapshot" erfolgreich entfernt  
root@server1:~#

Danach finden Sie das Backup im Verzeichnis /var/cache/mylvmbackup/backup (es sei denn, Sie haben einen anderen Speicherort angegeben):

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:~#

Die tar.gz-Datei enthält zwei Verzeichnisse, backup (mit den Datenbanken und Tabellen aus /var/lib/mysql, die Sie einfach nach einem Datenbankabsturz zurückkopieren können - die Datenbank sollte gestoppt werden, wenn Sie dies tun) und backup-pos, das Ihre my.cnf-Datei enthält (ein Backup von /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 Links

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.