Einführung
Regelmäßige Datenbanksicherungen sind ein entscheidender Schritt zum Schutz vor unbeabsichtigten Datenverlustereignissen. Das Entwerfen einer wirksamen Sicherungs- und Wiederherstellungsstrategie umfasst häufig den Kompromiss zwischen Leistungseinbußen, Implementierungskosten und Datenspeicherkosten mit Wiederherstellungsgeschwindigkeit, Datenintegrität und Sicherungsumfang. Die optimale Lösung hängt von Ihrem Wiederherstellungspunkt und Ihrer Zeit inobjectivesowie von der Skalierung und Architektur der Datenbank ab.
In diesem Handbuch wird gezeigt, wie Sie mithilfe von LVM-Snapshots eine physische Live-Sicherung (oder "Hot" -Sicherung) einer laufenden MySQL-Datenbank durchführen. Anschließend komprimieren und speichern wir die Daten in einem DigitalOcean Space.
Das in diesem Lernprogramm vorgestellte Verfahren eignet sich gut für große MySQL-Datenbanken, Datenbanken mit einer Mischung aus Speicher-Engines (wie InnoDB, TokuDB und MyISAM) und Datenbankserver mit mehreren angehängten Blockspeicher-Volumes, die mit LVM verwaltet werden.
Zunächst stellen wir sicher, dass unser Ubuntu 16.04-Server einen LVM-Snapshot erstellen und bereitstellen kann. Als Nächstes erstellen wir einen LVM-Snapshot des logischen Volumes, das das Datenverzeichnis von MySQL enthält. Anschließend stellen wir dieses Snapshot-Volume (eingefrorenes logisches Volume) bereit und komprimieren das MySQL-Datenverzeichnis und senden es zur Speicherung an DigitalOcean Spaces. Abschließend führen wir kurz ein Beispiel für ein Wiederherstellungsszenario durch.
Voraussetzungen
Um dieses Handbuch verwenden zu können, müssen folgende Voraussetzungen erfüllt sein:
-
Ein Ubuntu 16.04-Droplet mit einem Nicht-Root-Benutzer, der über Sudo-Berechtigungen verfügt, wie inInitial Server Setup with Ubuntu 16.04 beschrieben
-
Eine laufende Installation von MySQL 5.7+, wie inHow To Install MySQL on Ubuntu 16.04 beschrieben
-
Ein logisches LVM-Volume, auf dem Ihr MySQL-Datenbankdatenverzeichnis gespeichert ist:
-
Weitere Informationen zu LVM und zum Einrichten eines logischen Volumes finden Sie unterAn Introduction to LVM Concepts, Terminology, and Operations
-
Weitere Informationen zum Verschieben des MySQL-Datenverzeichnisses vom Standardspeicherort
/var/lib/mysql
finden Sie unterHow To Move a MySQL Data Directory to a New Location on Ubuntu 16.04
-
-
Ein DigitalOcean Space und eine Reihe von API-Anmeldeinformationen, wie inHow To Create a DigitalOcean Space and API Key. angegeben
-
Der Befehlszeilen-Dateiübertragungsclient (2.X) von
s3cmd
wurde gemäßStep 1 of How To Use Logrotate and S3cmd to Archive Logs to Object Storage on Ubuntu 16.04 installiert -
s3cmd
ist für den Zugriff auf Ihren Space konfiguriert, wie inHow To Configure s3cmd 2.x To Manage DigitalOcean Spaces beschrieben
Sobald Sie alle Einstellungen vorgenommen haben, können Sie mit dieser Anleitung beginnen.
[[Schritt-1 - Untersuchung der MySQL- und LvM-Konfiguration]] == Schritt 1 - Untersuchung der MySQL- und LVM-Konfiguration
Zunächst suchen wir unser MySQL-Datenverzeichnis und notieren diese Details zu unserer LVM-Konfiguration.
Suchen Sie MySQLdatadir
Führen Sie den folgenden Befehl aus, um den Pfad zu Ihrem MySQL-Datenverzeichnis zu finden:
mysqladmin -u root -p variables | grep datadir
Geben Sie das Kennwort Ihres MySQLroot
ein, wenn Sie dazu aufgefordert werden. Sie sollten eine Ausgabe ähnlich der folgenden sehen:
Output| datadir | /data/mysql/
Für die in diesem Handbuch verwendete MySQL-Installation lautet das Datenverzeichnis/data/mysql
.
Wir müssen jetzt bestätigen, dass/data/mysql
auf einem logischen LVM-Volume lebt. Um dies zu bestätigen, führen wirlsblk
aus:
lsblk
Sie sollten eine Ausgabe ähnlich der folgenden sehen:
OutputNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 600G 0 disk
└─vg1-mysql_data 252:0 0 475G 0 lvm /data
vda 253:0 0 160G 0 disk
├─vda1 253:1 0 159.9G 0 part /
├─vda14 253:14 0 4M 0 part
└─vda15 253:15 0 106M 0 part /boot/efi
Daraus ergibt sich, dass/data
tatsächlich der Einhängepunkt für ein logisches LVM-Volume namensmysql_data
ist. Es ist Mitglied der Volumengruppevg1
.
Wir müssen jetzt sicherstellen, dass in unserer Volumengruppevg1
genügend freier Speicherplatz verfügbar ist, um einen LVM-Snapshot zu erstellen.
Lernen Sie die LVM-Konfiguration kennen
Beachten Sie, dass die Ausgabe der in diesem Abschnitt beschriebenen Befehle von der Hardware und der LVM-Konfiguration Ihres Servers abhängt. Lassen Sie uns schnell die Hardware- und LVM-Konfiguration für den in diesem Handbuch verwendeten Ubuntu 16.04-Server untersuchen.
Lassen Sie uns zunächst herausfinden, wie viele physische Volumes wir mitpvscan
haben:
sudo pvscan
Sie sollten eine Ausgabe ähnlich der folgenden sehen:
Output PV /dev/sda VG vg1 lvm2 [500.00 GiB / 25.00 GiB free]
Total: 1 [500.00 GiB] / in use: 1 [500.00 GiB] / in no VG: 0 [0 ]
Wir stellen fest, dass wir ein physisches Volumen von 500 GB (/dev/sda
) haben, das sich in einer Volumengruppe (vg1
) befindet. 475 GB dieses physischen Datenträgers wurden logischen Datenträgern zugewiesen, während 25 GB für die Verwendung durch die Datenträgergruppe frei bleiben.
Wir können dies bestätigen, indem wir uns die Volumengruppevg1
mit dem Befehlvgdisplay
genauer ansehen:
sudo vgdisplay
Sie sollten eine Ausgabe sehen, die der folgenden ähnelt:
Output--- Volume group ---
VG Name vg1
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 1
Act PV 1
VG Size 500.00 GiB
PE Size 4.00 MiB
Total PE 127999
Alloc PE / Size 121600 / 475.00 GiB
Free PE / Size 6399 / 25.00 GiB
VG UUID KEsoDE-zON7-NdyO-ioxb-6FSl-CB4m-S3QCRj
Aus den ZeilenAlloc PE / Size undFree PE / Size geht hervor, dass 475 GB zugewiesen und in der Volumengruppevg1
25 GB frei sind. Die ZeileCur PVzeigt uns, dass wir 1 physisches Volumen in dieser Volumengruppe haben. Die ZeileCur LVzeigt an, dass wir den Speicherplatzpool in dieser Datenträgergruppe verwendet haben, um einen logischen Datenträger zu erstellen.
Schauen wir uns nun dieses logische Volume mitlvdisplay
an:
sudo lvdisplay
Sie sollten eine Ausgabe ähnlich der folgenden sehen:
Output --- Logical volume ---
LV Path /dev/vg1/mysql_data
LV Name mysql_data
VG Name vg1
LV UUID T98x9c-zvC1-f0Rw-4ipn-Cxo2-duwk-KUwQQc
LV Write Access read/write
LV Creation host, time LVM, 2018-04-18 20:11:48 +0000
LV Status available
# open 1
LV Size 475.00 GiB
Current LE 121600
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:0
AusLV Size geht hervor, dass wir ein logisches Volume mit 475 GB,mysql_data
, bei/dev/vg1/mysql_data
gefunden haben (denken Sie daran, dassvg1
der Name der Volume-Gruppe vonmysql_data
war).
Zusammenfassend lässt sich sagen, dass auf dem Ubuntu 16.04-Server, der für dieses Lernprogramm verwendet wird, ein physisches Volume mit 500 GB (/dev/sda
) verwendet wird, um eine Volume-Gruppe (vg1
) zu sichern, aus der wir eine einzelne logische 475 GB erstellt haben Volumen (mysql_data
). Dadurch verbleiben 25 GB freier Speicherplatz in der Datenträgergruppe, der zum Erstellen weiterer logischer Datenträger (und Snapshots) verwendet werden kann.
Ihre Hardware- und LVM-Konfiguration unterscheiden sich wahrscheinlich. Möglicherweise sind mehrere Blockspeichergeräte angeschlossen, die in einzelnen oder mehreren Datenträgergruppen zusammengefasst sind. Die Vorgehensweise zum Erstellen eines Snapshots eines bestimmten logischen Volumes ist jedoch dieselbe.
Wenn Sie die in diesem Abschnitt beschriebenen Befehlsfolgen verwenden, sollten Sie nun einen allgemeinen Überblick über Ihre LVM- und Hardwarekonfiguration erhalten.
Im nächsten Schritt bereiten wir Ihren Datenbankserver für die Erstellung von LVM-Snapshots vor.
[[Schritt-2 - Vorbereitung Ihres Servers für lvm-Snapshots]] == Schritt 2 - Bereiten Sie Ihren Server für LVM-Snapshots vor
Um sicherzustellen, dass wir einen LVM-Snapshot sicher erstellen können, müssen wir genügend Speicherplatz bereitstellen, um alle Schreibvorgänge oder Änderungen abzudecken, die während der Sicherung und der Dateiübertragung auf Spaces auftreten können. Abhängig von der Größe Ihrer Datenbank kann diese Sicherung mehrere Stunden dauern. Daher sollten Sie hier vorsichtig vorgehen. Wenn Ihr Snapshot-Volume während der Sicherung keinen Speicherplatz mehr hat, wird das Snapshot-Volume ungültig und Sie haben keine konsistente Sicherung mehr.
Im vorherigen Schritt haben wir festgestellt, dass die Datenträgergruppe (vg1
), die unser logisches Hauptvolume (mysql_data
) enthält, nur 25 GB frei hatte. Es kann zwar vorkommen, dass in der Zeit, die für die Sicherung unserer Datenbank erforderlich ist, 25 GB Änderungen nicht auf die Festplatte geschrieben werden. Im Idealfall sollte jedoch ein Sicherheitsspielraum von mindestens 100 GB eingehalten werden. In einer Produktionsumgebung empfiehlt es sich, die durchschnittliche Datenmenge zu messen, die während des geplanten Sicherungsfensters auf die Festplatte geschrieben wird, und die Größe des Snapshot-Volumes entsprechend zu skalieren.
Um der Volume-Gruppevg1
zusätzliche 75 GB Speicherplatz hinzuzufügen, können Sie entweder ein Blockspeichergerät anschließen oder das derzeit an das Droplet angeschlossene Volume vergrößern. In diesem Lernprogramm erweitern wir das bereits angehängte Blockspeichervolumen. Weitere Informationen zum Anhängen eines zusätzlichen Blockspeichervolumens finden Sie inAn Introduction to DigitalOcean Block Storage.
[.note] #Note: Einige Regionen unterstützen Block Storage noch nicht und Sie können möglicherweise kein Block Storage-Volume an Ihr Droplet anhängen. In diesem Fall besteht eine sinnvolle Problemumgehung darin, ein Snapshot Ihres Droplets zu erstellen und mit diesem Snapshot-Image ein neues Droplet zu erstellen, zu dem Sie dann Blockspeicher hinzufügen können.
#
Erweitern wir das Blockspeicher-Volume, das an dieses Droplet angehängt ist.
Navigieren Sie zum Web-Steuerungsfeld von DigitalOcean und im Dashboard zu Ihrem Droplet.
Klicken Sie in der Seitenleiste inVolumes:
In diesem Bereich sollten alle Blockspeichervolumes angezeigt werden, die an Ihr Droplet angehängt sind. Für das in diesem Handbuch verwendete Ubuntu-Droplet haben wir ein Blockspeicher-Volume angehängt:
Klicken Sie aufMore und dann aufResize volume.
Hier können Sie eine von mehreren vordefinierten Volumengrößen oder eine eigene Volumengröße auswählen. Erhöhen Sie das 500-GB-Volume um 100 GB auf 600 GB:
Drücken SieContinue. Das angehängte Blockspeichervolumen wurde jetzt um 100 GB erhöht.
Um diese Geräteänderung an LVM weiterzugeben, müssenpvresize
ausgeführt werden.
Melden Sie sich bei Ihrem Server an und führen Siepvscan
erneut aus, um nach physischen Volumes zu suchen:
sudo pvscan
Für das physische Volumen von/dev/sda
ollte dieselbe Ausgabe wie zuvor angezeigt werden:
Output PV /dev/sda VG vg1 lvm2 [500.00 GiB / 25.00 GiB free]
Total: 1 [500.00 GiB] / in use: 1 [500.00 GiB] / in no VG: 0 [0 ]
Führen Sie nunpvresize
auf dem Volume aus, um den zusätzlichen Speicherplatz auszufüllen, den wir gerade hinzugefügt haben:
sudo pvresize /dev/sda
Sie sollten die folgende Ausgabe sehen:
OutputPhysical volume "/dev/sda" changed
1 physical volume(s) resized / 0 physical volume(s) not resized
Lassen Sie uns bestätigen, dass unser physisches Volumen jetzt 100 GB größer ist, indem Sie weiterepvscan
ausführen:
sudo pvscan
Wir stellen fest, dass das physische Volumen von/dev/sda
jetzt 600 GB beträgt:
Output PV /dev/sda VG vg1 lvm2 [600.00 GiB / 125.00 GiB free]
Total: 1 [600.00 GiB] / in use: 1 [600.00 GiB] / in no VG: 0 [0 ]
Bestätigen wir nun, dass der freie Speicherplatz unserer Volumengruppe ebenfalls um 100 GB gestiegen ist:
sudo vgdisplay
Sie sollten dann die folgende Ausgabe sehen:
Output --- Volume group ---
VG Name vg1
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 1
Act PV 1
VG Size 600.00 GiB
PE Size 4.00 MiB
Total PE 153599
Alloc PE / Size 121600 / 475.00 GiB
Free PE / Size 31999 / 125.00 GiB
VG UUID KEsoDE-zON7-NdyO-ioxb-6FSl-CB4m-S3QCRj
Dies bedeutet, dass jetzt 125 GB freier Speicherplatz für die Erstellung des Snapshot-Volumes verfügbar sind.
Für die Zwecke dieses Lernprogramms sind 125 GB ausreichend, um Schreibvorgänge und Änderungen während des Sicherungs- und Upload-Vorgangs zu absorbieren. In einer Produktionsumgebung sollte die Größe des Snapshot-Volumes jedoch proportional zur erwarteten Datenträgernutzung während des Sicherungsfensters skaliert werden.
Nachdem in unserer Datenträgergruppe genügend Speicherplatz verfügbar ist, um alle Schreibvorgänge oder Änderungen abzudecken, die während des Snapshots und der Sicherung auftreten können, können Sie mit dem Erstellen des Snapshot-Datenträgers fortfahren.
[[Schritt 3 - Erstellen und Bereitstellen eines lvm-Snapshots]] == Schritt 3 - Erstellen und Bereitstellen eines LVM-Snapshots
[.warning] #Warning: Während der LVM-Snapshot aktiv ist, kommt es beim Schreiben auf die Festplatte zu Leistungseinbußen. Sie sollten dieses Verfahren zuerst mit einer Nichtproduktionsdatenbank mit simulierter Last testen, um zu überprüfen, ob diese Methode in Ihrer Produktionsbereitstellung funktioniert.
#
Wir erstellen jetzt eine Momentaufnahme des logischen Volumes vonmysql_data
mitlvcreate
. Bevor wir dies tun, müssen wir Schreibvorgänge in die Datenbank mitFLUSH TABLES WITH READ LOCK
einfrieren, damit wir die Datenkonsistenz gewährleisten können. Die Tabellen müssen nur gesperrt gelesen werden, bislvcreate
ausgeführt werden. An diesem Punkt können sie entsperrt werden. Wenn Sie diese Reihe von Befehlen skripten, sollte die Gesamtsperrzeit sehr gering sein, abhängig von der Ausführung von Schreibabfragen.
Lesen Sie Lock MySQL Database
Beginnen wir mit dem Leeren der Tabellen. Verwenden Sie vom Terminal auf Ihrem Datenbankservermysql
, um sich bei Ihrer MySQL-Datenbank anzumelden:
mysql -u root -p
Führen Sie in der MySQL-Shell den BefehlFLUSH TABLES
aus, um Ihre Datenbank lesesperrend zu machen.
[.warning] #Warning: Nach dem Ausführen des folgenden Befehls werden alle geöffneten Tabellen geschlossen und alle Tabellen für alle Datenbanken mit einer globalen Lesesperre gesperrt. Wenn Sie dies in einer Produktionsdatenbank ausführen, empfiehlt es sich, diesen Befehl auf einem Replikat oder als Teil eines Skripts auszuführen, um die Zeitspanne zu minimieren, in der die Datenbank gesperrt wird.
#
FLUSH TABLES WITH READ LOCK;
Sie sollten die folgende Ausgabe sehen:
OutputQuery OK, 0 rows affected (0.00 sec)
Dies zeigt an, dass Ihre Datenbank schreibgeschützt ist. Verlassen Sie die MySQL-Eingabeaufforderung nicht, wir müssen sie geöffnet lassen.
Jetzt erstellen wir einen LVM-Snapshot des logischen Volumes, auf dem sich unsere MySQL-Daten befinden.
Erstellen Sie ein Snapshot-Volume und hängen Sie es ein
Wenn Sie diese MySQL-Client-Verbindung geöffnet lassen, melden Sie sich über ein neues Terminal-Fenster bei Ihrem Datenbankserver an.
[.warning] #Warning: Wenn Sie diese Verbindung schließen, wird die Sperre aufgehoben und die Schreibvorgänge werden fortgesetzt, wodurch der Snapshot inkonsistent wird.
#
Wir können jetzt eine Momentaufnahme des logischen Volumens vonmysql_data
machen. Wir werden 100 GB Pufferplatz zuweisen, um Schreibvorgänge und andere Änderungen bei der Durchführung der physischen Sicherung zu absorbieren. Führen Sie den folgenden Befehllvcreate
aus, um den LVM-Snapshot zu erstellen:
sudo lvcreate -L 100G -s -n mysql_data_snap /dev/vg1/mysql_data
Das Flag-L
gibt die Größe des logischen Volumes an, in diesem Fall 100 GB. -s
gibt an, dass das logische Volume ein Snapshot ist, in diesem Fall das logische Volume von/dev/vg1/mysql_data
. Wir haben uns entschieden, dieses Snapshot-Volumemysql_data_snap
zu nennen.
Sie sollten das folgende Ergebnis sehen:
OutputLogical volume "mysql_data_snap" created.
Dies zeigt an, dass wir jetzt eine Kopie des logischen Volumes vonmysql_data
haben, von dem aus wir eine Sicherung durchführen können.
Jetzt, da wir unsere MySQL-Datendateien zu einem bestimmten Zeitpunkt im Wesentlichen „eingefroren“ haben, können wir unsere Datenbanktabellen entsperren und die Schreibvorgänge fortsetzen. Führen Sie in Ihrer offenen MySQL-Verbindung den folgenden Befehl aus:
UNLOCK TABLES;
Sie sollten das folgende Ergebnis sehen:
OutputQuery OK, 0 rows affected (0.00 sec)
Die Tabellen wurden entsperrt und Sie können diese Verbindung jetzt sicher schließen.
Zu diesem Zeitpunkt ist Ihre Datenbank noch aktiv und akzeptiert eingehende Verbindungen und Schreibvorgänge. Wir haben jedoch eine konsistente Momentaufnahme der Daten zu dem Zeitpunkt, zu dem wirFLUSH TABLES WITH READ LOCK
ausgeführt haben (oder, um genau zu sein, zu dem Zeitpunkt, zu dem die letzte Schreibabfrage nach Abschluss vonFLUSH
).
Der letzte Schritt besteht darin, diesen Schnappschuss bereitzustellen, damit wir auf diese eingefrorenen Datendateien zugreifen können.
Zuerst erstellen wir einen Einhängepunkt mit dem Namen/backup_src
:
sudo mkdir /backup_src
Jetzt werden wir das Snapshot-Volume auf/backup_src
einstellen:
sudo mount /dev/vg1/mysql_data_snap /backup_src
Wir können jetzt auf die eingefrorenen Datendateien zugreifen. Lass uns mal sehen:
cd /backup_src
ls
Sie sollten Ihr MySQL-Datenverzeichnis sehen:
Outputlost+found mysql
Nachdem wir Zugriff auf eine konsistente Momentaufnahme unserer Daten haben, können wir diese in einem DigitalOcean Space sichern.
[[Schritt 4 - Komprimieren und Hochladen von Dateien in Digitalocean-Bereiche]] == Schritt 4 - Komprimieren und Hochladen von Dateien in DigitalOcean-Bereiche
Um dieses Backup in unseren DigitalOcean Space hochzuladen, verwenden wir das Tools3cmd
, das wir inprerequisite steps installiert und konfiguriert haben.
Wir testen zuerst die Konfiguration vons3cmd
und versuchen, auf unseren Sicherungsspeicherplatz zuzugreifen (in diesem Tutorial heißt unser Speicherplatzmysql-backup-demo
):
s3cmd info s3://mysql-backup-demo/
Sie sollten die folgende Ausgabe sehen:
Outputs3://mysql-backup-demo/ (bucket):
Location: nyc3
Payer: BucketOwner
Expiration Rule: none
Policy: none
CORS: none
ACL: 3587522: FULL_CONTROL
Diese Ausgabe zeigt an, dass die Verbindung erfolgreich war unds3cmd
Objekte in den Space übertragen können.
Wir werden jetzt unser MySQL-Datenverzeichnis komprimieren und in den Bereichmysql-backup-demo
hochladen:
sudo tar -czvf - /backup_src/mysql | s3cmd put - s3://mysql-backup-demo/mysql_backup_180423.tar.gz
Hier verwenden wirtar
, um das MySQL-Datenverzeichnis zu komprimieren und zu archivieren, und leiten die Ausgabe ans3cmd
weiter, mit der wir das komprimierte Archiv an Spaces übertragen. Wir haben das komprimierte Archivmysql_backup_180423.tar.gz
genannt.
Da wirtar
im ausführlichen Modus verwendet haben, wird die Liste der zu komprimierenden Dateien angezeigt (um diese Ausgabe auszublenden, lassen Sie das Flag-v
im obigen Befehl weg).
Die Ausgabe wird mit den folgenden Dateiübertragungsinformationen abgeschlossen:
Output...
upload: '' -> 's3://mysql-backup-demo/mysql_backup_180423.tar.gz' [part 1, 1417kB]
1451996 of 1451996 100% in 0s 1993.41 kB/s done
Sobald die Übertragung abgeschlossen ist, überprüfen wir, ob die Datei erfolgreich in unseren Space übertragen wurde, indem wir den Space-Inhalt auflisten:
s3cmd ls s3://mysql-backup-demo/
Sie sollten die Backup-Archivdatei sehen:
Output2018-04-23 20:39 297 s3://mysql-backup-demo/mysql_backup_180423.tar.gz
Zu diesem Zeitpunkt haben wir eine physische MySQL-Sicherung in DigitalOcean Spaces erfolgreich abgeschlossen.
Wir werden jetzt das Snapshot-Volume aushängen und löschen und den verwendeten Speicherplatz in unserer Volume-Gruppevg1
wiederherstellen.
[[Schritt-5 -—- Snapshot-Volume aushängen und ablegen]] == Schritt 5 - Snapshot-Volume aushängen und ablegen
Nachdem unsere Daten gesichert wurden, können wir das zuvor in diesem Lernprogramm erstellte Snapshot-Volume nicht mehr verwenden und es sicher löschen.
Führen Sie den folgenden Befehl aus, um die Bereitstellung des Volumes aufzuheben:
sudo umount /backup_src
Ersetzen Sie/backup_src
durch den Einhängepunkt Ihres Snapshot-Volumes.
Wir können jetzt das Snapshot-Volume löschen. Führen Sie dazu den folgenden Befehl aus:
sudo lvremove vg1/mysql_data_snap
Hier entsprichtvg1
Ihrem Volume-Gruppennamen undmysql_data_snap
Ihrem Snapshot-Volume-Namen.
Sie werden aufgefordert, das Entfernen zu bestätigen, auf das SieY antworten sollten.
Sie sollten die folgende Ausgabe sehen:
Output Logical volume "mysql_data_snap" successfully removed
Das Snapshot-Volume wurde erfolgreich gelöscht. Sie haben jetzt eine vollständige physische MySQL-Sicherung abgeschlossen und auf Ihren DigitalOcean Space hochgeladen.
Wir beenden dieses Tutorial, indem wir schnell ein Wiederherstellungsszenario durchlaufen.
[[Schritt 6 - Testwiederherstellung von physischer Sicherung]] == Schritt 6 - Wiederherstellung von physischer Sicherung testen
Um unsere MySQL-Datenbank aus der physischen Sicherung wiederherzustellen, die wir zuvor auf Spaces hochgeladen haben, übertragen wir die Sicherung auf unseren Datenbankserver und verwenden die extrahierten Dateien als unser wiederhergestelltes MySQL-Datenverzeichnis.
Übertragen Sie zuerst die Sicherung von unserem Space zurück in das Ausgangsverzeichnis des Benutzers auf dem Datenbankserver:
s3cmd get s3://mysql-backup-demo/mysql_backup_180423.tar.gz ~/mysql_backup_180423.tar.gz
Sie sollten eine Dateiübertragungsausgabe sehen:
Outputdownload: 's3://mysql-backup-demo/mysql_backup_180423.tar.gz' -> '~/mysql_backup_180423.tar.gz' [1 of 1]
1451889 of 1451889 100% in 0s 38.49 MB/s done
Jetzt stoppen wir den laufenden Datenbankserver und bereinigen das vorhandene Datenverzeichnis, um eine saubere Wiederherstellung der physischen Sicherungsdateien zu testen.
Stoppen Sie zuerst den MySQL-Server:
sudo service mysql stop
Löschen Sie nun den Inhalt Ihres MySQL-Datenverzeichnisses:
sudo rm -rf /data/*
Denken Sie daran, dass in diesem Lernprogramm der nicht standardmäßige MySQL-Datenverzeichnispfad/data
ist.
Extrahieren Sie nun das physische Sicherungsarchiv in Ihr MySQL-Datenverzeichnis:
sudo tar -xzvf ~/mysql_backup_180423.tar.gz -C /data
Nachdem die Datendateien wiederhergestellt wurden, können wir die MySQL-Datenbank neu starten und wiederherstellen lassen:
sudo service mysql start
Schließlich können wir uns bei unserem Datenbankserver anmelden, um zu überprüfen, ob die Wiederherstellung erfolgreich abgeschlossen wurde:
mysql -u root -p
Nach der Eingabe Ihres Passworts sollte die MySQL-Client-Eingabeaufforderung angezeigt werden:
OutputWelcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.21-0ubuntu0.16.04.1 (Ubuntu)
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Hier können Sie einige Tabellen durchsuchen, um zu überprüfen, ob Ihre Daten intakt sind.
Fazit
In diesem Tutorial haben wir gezeigt, wie Sie die Snapshot-Funktion von LVM nutzen können, um das Dateisystem einzufrieren und eine vollständige physische Sicherung und Wiederherstellung einer laufenden MySQL-Instanz durchzuführen. Wenn Sie LVM zum Verwalten eines oder mehrerer Speichervolumes verwenden, die Ihre MySQL-Daten enthalten, bietet diese Funktion eine praktische Methode zum Sichern Ihrer Produktionsdatenbank.
In einer Produktionsumgebung sollte dieses Verfahren idealerweise mit einem Skript versehen und mit einer ordnungsgemäßen Protokollierung, Überwachung und Warnung geplant werden. Außerdem sollte einFLUSH TABLES WITH READ LOCK
(egal wie kurz) nicht auf dem Master-Server ausgeführt werden, sondern auf einem minimal geladenen Replikat. Beachten Sie, dass Sie mit geringfügigen Änderungen auch das oben beschriebene Verfahren anpassen können, um Replikate aus einer physischen Mastersicherung schnell hochzufahren.
Wenn Ihre MySQL-Instanz ausschließlich InnoDB als Speicher-Engine verwendet, können Sie mit Percona XtraBackup auch physische Sicherungen Ihrer Datenbank auf ähnliche Weise durchführen. Weitere Informationen finden Sie in unserem Tutorial zuHow To Back Up MySQL Databases to Object Storage with Percona on Ubuntu 16.04.
Eine sinnvolle Alternative zum Hochladen physischer Sicherungsdateien auf Spaces wäre die Verwendung von LVM-Snapshots in Kombination mit Droplet-Snapshots. Weitere Informationen zu Droplet-Snapshots finden Sie unterDigitalOcean Backups and Snapshots Explained.
Weitere Informationen zu DigitalOcean Spaces, dem in diesem Handbuch verwendeten Objektspeicher, finden Sie unterAn Introduction To DigitalOcean Spaces.