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/sdbserver1:~# 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:
- Software, die beim Booten läuft (z.B. alte Versionen von LILO)
- 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/sdb1Das 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 mylvmbackupSchauen Sie sich an
man mylvmbackupum 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=tarUnd für InnoDB:
mylvmbackup --user=root --password=yourrootsqlpassword --innodb_recover --skip_flush_tables --mycnf=/etc/mysql/my.cnf --vgname=server1 --lvname=mysql --backuptype=tarStellen 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/backuproot@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 -lroot@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
- mylvmbackup: http://www.lenzg.net/mylvmbackup/
- MySQL: http://www.mysql.com/
- Debian: http://www.debian.org/
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.