mylvmbackup ist ein Perl-Skript zum schnellen Erstellen von MySQL-Backups. Dazu verwendet es die Snapshot-Funktion von LVM. Um eine Sicherung durchzuführen, erhält mylvmbackup eine Lesesperre für alle Tabellen und leert alle Server-Caches auf die Festplatte, erstellt einen Snapshot des Volumes, das das MySQL-Datenverzeichnis enthält, und entsperrt die Tabellen erneut. Dieser Artikel zeigt, wie man es auf einem Debian Squeeze-Server verwendet.
Ich gebe keine Garantie dafür, dass dies bei Ihnen funktioniert!
1 Vorbemerkung
Ich gehe davon aus, dass MySQL bereits auf Ihrem System eingerichtet ist und ausgeführt wird. Das System muss LVM verwenden, und das MySQL-Datenverzeichnis (/var/lib/mysql) sollte eine eigene LVM-Partition haben (obwohl dies optional ist).
Wenn Sie LVM-Partitionen mit LVM-Snapshots sichern (und wiederherstellen) gelesen haben, wissen Sie, dass LVM-Snapshots einige unbenutzte LVM-Partitionen 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 die Sicherung zu erstellen.
Dies ist meine aktuelle Situation:
[email protected]:~# df -h
Dateisystem Größe Verwendet 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,6 m 249 m 2%/dev
tmpfs 252m 0 252m 0%/dev/shm
/dev/sda1 471m 23m 425m 6%/boot
/dev/mapper/server1-mysql
8.9 G 170M 8.3G 2 % /var/lib/mysql
[email protected]:~#
Wie Sie sehen, habe ich zwei LVM-Partitionen, / und /var/lib/mysql (plus eine hier nicht gezeigte LVM-Swap-Partition). Die Volume-Gruppe heißt server1, und die Volumes heißen swap, root und mysql:
[email protected]:~# pvdisplay
--- Physical volume ---
PV Name /dev/sda5
VG Name server1
PV Size 29.5. Nutzbar 3,66 mb
Allocatable Ja (aber voll)
PE -Größe (KBYTE) 4096
Total PE 7557
Free PE 0
zugewiesene PE 7557
PV UUID 0gCmpE-FGel-9ayg-E2yg-kkEu-B72X-kFvaye
[E-Mail-geschützt]:~#
[E-Mail-geschützt]:~# vgdisplay
--- Volumengruppe ---
VG Name server1
System-ID
Format lvm2
Metadatenbereiche 1
Metadatensequenz 4
VG Zugriff Lesen /Schreiben
VG -Status -Resizable
max LV 0
CUR LV 3
Öffnen Sie LV 3
max PV 0
cur Pv 1
Akt PV 1
VG Größe 29,52 GB
PE-Größe 4,00 mb
Total PE 7557
Alloc PE /Größe 7557 /29.52 GB
Kostenlose PE /Größe 0/0
VG UUID PH5HPC-JQEP- BFYs-wWlA-hu03-qwuQ-0cNIu3
[E-Mail-geschützt]:~#
[E-Mail-geschützt]:~# lvdisplay
-- - Logisches Volume ---
LV Name /dev/server1/swap
VG Name server1
LV UIID RCeLCK-MO5p-xoMq-SwTT-n2NV-GaP6-Write /Write /Gap6-D Zugriff auf Read /Schreiben
LV -Status verfügbar
#Öffnen Sie 2
LV -Größe 1,00 GB
aktuelles LE 256
Segmente 1
Allocation Inherit
lesen voraus Sektoren auto
- aktuell eingestellt auf 256
Gerät blockieren 254:0
--- Logisches Volume ---
LV Name /dev/server1/root
VG Name server1
LV UUID 5Wen7N-XYMH-MQZ1-FKH5-0XXA-1Y2T-V3PYBB
LV-Schreibzugriff Read /Schreiben
LV-Status verfügbar
#Öffnen Sie 1
LV-Größe 19.53 GB
Strom LE 5000
Segmente 1
Zuordnung übernehmen
Read Ahead Sektoren auto
- derzeit eingestellt auf 256
Gerät blockieren >
LV Name /dev/server1/mysql
VG Name server1
LV UID wk8ybr6-fDl8-4tg3-tneT-dy1d Zugriff auf Read /Schreiben
LV -Status verfügbar
#Öffnen Sie 1
LV -Größe 8.99 GB
aktuelles LE 2301
Segmente 1
Allocation Inherit
lesen Voraus Sektoren Auto
- derzeit eingestellt auf 256
Gerät blockieren 254:2
[email protected]:~#Hier eine Übersicht meiner beiden Festplatten:
[email protected]:~# fdisk -l
Festplatte /dev/sda: 32,2 GB, 32212254720 Byte
255 Köpfe, 63 Sektoren/Spur, 3916 Zylinder
Einheiten =Zylinder 16065 * 512 =8.225.280 Byte
Plattenkennzeichner:0x0009353f
zu Start Start End Blocks Id-System
/ dev / sda1 * 1 62 83 497983+ Linux
/dev/sda2 63 3916 30957255 5 erweitert
/dev/sda5 63 3916 3095723+ 8E Linux LVM
disk/dev/sdb:10.7 gb, 10737418240 bytes
255 255 Köpfe, 63 Sektoren/Spur, 1305 Zylinder
Einheiten = Zylinder von 16065 * 512 = 8225280 Bytes
Festplattenkennung: 0x00000000
Festplatte /dev/sdb enthält keine gültige Partitionstabelle
[E-Mail-geschützt]:~#
2 Vorbereiten von /dev/sdb
Bevor wir Snapshots auf /dev/sdb erstellen können, müssen wir es partitionieren (Linux LVM) und zu unserer Volumengruppe (server1) hinzufügen.
Ich erstelle jetzt die Partition /dev/sdb1 und füge sie der Volumengruppe server1 hinzu:
fdisk /dev/sdbserver1:~# fdisk /dev/sdb
Gerät enthält weder gültige DOS-Partitionstabelle, noch Sun, SGI oder OSF-Disklabel
Erstellen eines neuen DOS-Disklabels. Änderungen bleiben nur im Speicher,
bis Sie sich entscheiden, sie zu schreiben. Danach ist natürlich der vorherige
Inhalt nicht wiederherstellbar.
Die Anzahl der Zylinder für diese Festplatte ist auf 1305 gesetzt.
Da ist nichts ist falsch, aber das ist größer als 1024
und könnte in bestimmten Setups Probleme verursachen mit:
1) Software, die beim Booten ausgeführt wird (z. B. alte LILO-Versionen)
2) Boot- und Partitionierungssoftware von anderen Betriebssystemen
(z. B. DOS FDISK, OS/2 FDISK)
Warnung: ungültiges Flag 0x0000 von Partitionstabelle 4 wird von w(rite) korrigiert
Befehl (m für Hilfe): <-- n
Befehl Aktion
e erweitert
p primäre Partition (1-4)
<-- p
Partitionsnummer (1-4): <-- 1
Erster Zylinder (1-1305, Standard 1):<-- [ENTER]
Unter Verwendung des Standardwerts 1
Letzter Zylinder oder +Größe oder + sizeM oder +sizeK (1-1305, Standard 1305):<-- [ENTER]
Using default value 1305
Command (m for help): <-- t
Ausgewählte Partition 1
Hex-Code (geben Sie L ein, um Codes aufzulisten): <-- 8e
Ch veränderter Systemtyp Partition 1 bis 8e (Linux LVM)
Befehl (m für Hilfe): <-- w
Die Partitionstabelle wurde geändert!
Aufruf von ioctl(), um die Partitionstabelle erneut zu lesen.
Datenträger werden synchronisiert.pvcreate /dev/sdb1
vgextend server1 /dev/sdb1Das war's - wir müssen keine Volumes darauf erstellen - das wird von mylvmbackup automatisch erledigt.
3 Installieren und Verwenden von mylvmbackup
Debian Squeeze stellt ein Paket für mylvmbackup bereit, daher können wir es einfach wie folgt installieren:
apt-get install mylvmbackupSchau mal auf
man mylvmbackupum zu lernen, wie man es verwendet (lesen Sie den Teil über InnoDB-Tabellen sorgfältig, wenn Sie InnoDB verwenden).
Die mylvmbackup-Konfigurationsdatei ist /etc/mylvmbackup.conf, sodass Sie Ihre Optionen entweder auf der Befehlszeile oder in dieser Datei angeben können (Befehlszeilenoptionen überschreiben die Optionen in /etc/mylvmbackup.conf).
Das Standardsicherungsverzeichnis 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 Volume-Gruppennamen (hier server1) und den Volume-Namen des Volumes eingeben, das die MySQL-Daten enthält (das Volume ist /dev/server1/mysql, daher lautet der Name mysql).
Wenn alles gut geht, sollten Sie viele Ausgaben sehen:
[email protected]:~# mylvmbackup --user=root --password=yourrootsqlpassword --mycnf=/etc/mysql/my.cnf --vgname=server1 --lvname=mysql --backuptype=tar
20120416 19:16:58 Info: Verbinde mit Datenbank...
20120416 19:16:58 Info: Leeren von Tabellen mit Lesesperre...
20120416 19:16:58 Info: Position einnehmen record...
20120416 19:16:58 Info:Snapshot wird erstellt...
Dateideskriptor 3 offen gelassen
Logisches Volume "mysql_snapshot" erstellt
20120416 19:16:58 Info: Tabellen entsperren...
20120416 19:16:58 Info: Verbindung von Datenbank trennen...
20120416 19:16:58 Info: Schnappschuss bereitstellen...
20120416 19:16 :59 Info: Meine.cnf wird kopiert...
20120416 19:16:59 Info: Tatsächliche Sicherung erstellen...
20120416 19:16:59 Info: Tar-Archiv /var/cache/mylvmbackup erstellen /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
zurück up/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
Sicherung /mydb/sys_dep.frm
backup/mydb/isp_firewall.frm
backup/mydb/isp_monitor.MYD
backup/mydb/isp_is p_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.fr m
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-Nutzungsstatistik:
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
[email protected]:~#Anschließend finden Sie die Sicherung im Verzeichnis /var/cache/mylvmbackup/backup (sofern Sie keinen anderen Speicherort angegeben haben):
ls -l /var/cache/mylvmbackup/backup[E-Mail geschützt]:~# ls -l /var/cache/mylvmbackup/backup
insgesamt 248
-rw-r--r-- 1 root root 246847 2012-04-16 19 :17 backup-20120416_191658_mysql.tar.gz
[E-Mail-geschützt]:~#Die tar.gz-Datei enthält zwei Verzeichnisse, backup (mit den Datenbanken und Tabellen aus /var/lib/mysql, die Sie nach einem Datenbankabsturz einfach zurückkopieren können - die Datenbank sollte dabei gestoppt werden) und backup-pos, das enthält Ihre my.cnf-Datei (ein Backup von /etc/mysql/my.cnf):
cd /var/cache/mylvmbackup/backup
tar xvfz backup-20120416_191658_mysql.tar.gz
ls -l[email protected]:/var/cache/mylvmbackup/backup# ls -l
insgesamt 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
[email protected]:/var/cache/mylvmbackup/backup#
4 Links
- myvmbackup:http://www.lenzg.net/mylvmbackup/
- MySQL:http://www.mysql.com/
- Debian:http://www.debian.org/