Sichern einer MySQL-Datenbank in DigitalOcean-Räumen mithilfe von LVM-Snapshots

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:

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 MySQLrootein, 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 Volumengruppevg1mit dem Befehlvgdisplaygenauer 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-Gruppevg1zusä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:

Sidebar

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:

Block Storage Volume

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:

Resize Volume

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/sdaollte 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/sdajetzt 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_datamitlvcreate. 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_datamachen. 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 Befehllvcreateaus, 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_datahaben, 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 vons3cmdund 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-demohochladen:

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.