So erstellen Sie Hot-Backups von MySQL-Datenbanken mit Percona XtraBackup unter Ubuntu 14.04

Einführung

Eine sehr häufige Herausforderung bei der Arbeit mit aktiven Datenbanksystemen ist das Ausführen von Hot-Backups, dh das Erstellen von Backups, ohne den Datenbankdienst anzuhalten oder schreibgeschützt zu machen. Das einfache Kopieren der Datendateien einer aktiven Datenbank führt häufig zu einer Kopie der Datenbank, die intern inkonsistent ist, d. H. Es kann nicht verwendet werden oder es fehlen Transaktionen, die während des Kopiervorgangs aufgetreten sind. Wenn Sie andererseits die Datenbank für geplante Sicherungen stoppen, werden datenbankabhängige Teile Ihrer Anwendung nicht mehr verfügbar. Percona XtraBackup ist ein Open Source-Dienstprogramm, mit dem Sie dieses Problem umgehen und konsistente vollständige oder inkrementelle Sicherungen von MySQL-, MariaDB- und Percona Server-Datenbanken erstellen können, die auch als Hot-Backups bezeichnet werden.

Im Gegensatz zu den logischen Sicherungen, die Dienstprogramme wie mysqldump erstellen, erstellt XtraBackup physische Sicherungen der Datenbankdateien - es erstellt eine Kopie der Datendateien. Dann wendet es das Transaktionslog an (a.k.a. Redo-Log) zu den physischen Sicherungen, um alle aktiven Transaktionen, die während der Erstellung der Sicherungen nicht abgeschlossen wurden, aufzufüllen, was zu konsistenten Sicherungen einer laufenden Datenbank führt. Die resultierende Datenbanksicherung kann dann unter Verwendung von https://www.digitalocean.com/community/tutorials/how-to-use-rsync-to-sync-local-and-remote-directories-on- a-vps [rsync], ein Backup-System wie Bacula oder https: / / www.digitalocean.com/community/tutorials/understanding-digitalocean-droplet-backups[DigitalOcean backups].

Dieses Tutorial zeigt Ihnen, wie Sie mit Percona XtraBackup unter Ubuntu 14.04 ein vollständiges Hot-Backup Ihrer MySQL- oder MariaDB-Datenbanken durchführen. Der Vorgang der Wiederherstellung der Datenbank aus einer Sicherung wird ebenfalls behandelt. Die CentOS 7-Version dieses Handbuchs finden Sie unter https://www.digitalocean.com/community/tutorials/how-to-create-hot-backups-of-mysql-databases-with-percona-xtrabackup-on-centos- 7 [hier].

Voraussetzungen

Um diesem Tutorial folgen zu können, müssen Sie Folgendes haben:

  • Superuser-Rechte auf einem Ubuntu 14.04-System

  • Eine laufende MySQL- oder MariaDB-Datenbank

  • Zugriff auf den Administratorbenutzer (root) Ihrer Datenbank

Um ein Hot-Backup Ihrer Datenbank durchzuführen, muss Ihr Datenbanksystem die * InnoDB * -Speicher-Engine verwenden. Dies liegt daran, dass XtraBackup sich auf das von InnoDB verwaltete Transaktionsprotokoll stützt. Wenn Ihre Datenbanken die MyISAM-Speicher-Engine verwenden, können Sie XtraBackup weiterhin verwenden, die Datenbank wird jedoch gegen Ende der Sicherung für einen kurzen Zeitraum gesperrt.

Überprüfen Sie die Speicher-Engine

Wenn Sie sich nicht sicher sind, welches Speichermodul Ihre Datenbanken verwenden, können Sie es auf verschiedene Arten nachschlagen. Eine Möglichkeit besteht darin, die betreffende Datenbank über die MySQL-Konsole auszuwählen und anschließend den Status jeder Tabelle auszugeben.

Rufen Sie zunächst die MySQL-Konsole auf:

mysql -u root -p

Geben Sie dann Ihr MySQL-Root-Passwort ein.

Wählen Sie an der MySQL-Eingabeaufforderung die Datenbank aus, die Sie überprüfen möchten. Stellen Sie sicher, dass Sie Ihren eigenen Datenbanknamen hier einsetzen:

USE ;

Dann drucken Sie die Tabellenstatus aus:

SHOW TABLE STATUS\G;

Die Engine sollte für jede Zeile in der Datenbank angegeben werden:

Example Output:...
*************************** 11. row ***************************
          Name: wp_users
        Engine:
...

Wenn Sie fertig sind, verlassen Sie die Konsole:

exit

Lassen Sie uns Percona XtraBackup installieren.

Installieren Sie Percona XtraBackup

Percona XtraBackup lässt sich am einfachsten mit apt-get installieren.

Fügen Sie den Percona-Repository-Schlüssel mit diesem Befehl hinzu:

sudo apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A

Fügen Sie dann das Percona-Repository zu Ihren passenden Quellen hinzu:

sudo sh -c "echo 'deb http://repo.percona.com/apt trusty main' > /etc/apt/sources.list.d/percona.list"
sudo sh -c "echo 'deb-src http://repo.percona.com/apt trusty main' >> /etc/apt/sources.list.d/percona.list"

Führen Sie diesen Befehl aus, um Ihre Apt-Quellen zu aktualisieren:

sudo apt-get update

Schließlich können Sie diesen Befehl ausführen, um XtraBackup zu installieren:

sudo apt-get install percona-xtrabackup

XtraBackup besteht hauptsächlich aus dem Programm XtraBackup und dem Perl-Skript + innobackupex +, mit dem wir unsere Datenbank-Backups erstellen.

Erste Vorbereitungen

Bevor wir XtraBackup zum ersten Mal verwenden, müssen wir System- und MySQL-Benutzer vorbereiten, die XtraBackup verwenden wird. Dieser Abschnitt behandelt die Erstvorbereitung.

Systembenutzer

Sofern Sie nicht vorhaben, den System-Root-Benutzer zu verwenden, müssen Sie einige grundlegende Vorbereitungen treffen, um sicherzustellen, dass XtraBackup ordnungsgemäß ausgeführt werden kann. Wir gehen davon aus, dass Sie als der Benutzer angemeldet sind, der XtraBackup ausführt, und dass er Superuser-Berechtigungen hat.

Fügen Sie Ihren Systembenutzer zur Gruppe "mysql" hinzu (ersetzen Sie ihn durch Ihren tatsächlichen Benutzernamen):

sudo gpasswd -a  mysql

Lassen Sie uns das Verzeichnis erstellen, in dem die von XtraBackup erstellten Sicherungen gespeichert werden:

sudo mkdir -p /data/backups
sudo chown -R : /data

Der Befehl "+ chown +" stellt sicher, dass der Benutzer in das Sicherungsverzeichnis schreiben kann.

MySQL-Benutzer

Für XtraBackup ist ein MySQL-Benutzer erforderlich, der zum Erstellen von Sicherungen verwendet wird. Erstellen wir jetzt eine.

Rufen Sie die MySQL-Konsole mit folgendem Befehl auf:

mysql -u root -p

Geben Sie das MySQL-Root-Passwort ein.

Erstellen Sie an der MySQL-Eingabeaufforderung einen neuen MySQL-Benutzer und weisen Sie ihm ein Kennwort zu. In diesem Beispiel heißt der Benutzer "bkpuser" und das Kennwort lautet "bkppassword". Ändern Sie beide in etwas Sicheres:

CREATE USER ''@'localhost' IDENTIFIED BY '';

Gewähren Sie als Nächstes den neuen MySQL-Benutzern die Berechtigungen zum erneuten Laden, Sperren und Replizieren für alle Datenbanken:

GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO ''@'localhost';
FLUSH PRIVILEGES;

Dies sind die mindestens erforderlichen Berechtigungen, die XtraBackup benötigt, um vollständige Sicherungen von Datenbanken zu erstellen.

Wenn Sie fertig sind, beenden Sie die MySQL-Konsole:

exit

Jetzt können wir eine vollständige Sicherung unserer Datenbanken erstellen.

Führen Sie eine vollständige Sicherung im laufenden Betrieb durch

In diesem Abschnitt werden die Schritte beschrieben, die zum Erstellen eines vollständigen Hot-Backups einer MySQL-Datenbank mit XtraBackup erforderlich sind. Nachdem wir sichergestellt haben, dass die Berechtigungen für die Datenbankdatei korrekt sind, erstellen wir mit XtraBackup * ein Backup * und bereiten es * vor *.

Aktualisieren Sie die Datadir-Berechtigungen

Unter Ubuntu 14.04 werden MySQL-Datendateien in + / var / lib / mysql gespeichert, was manchmal als * datadir * bezeichnet wird. Standardmäßig ist der Zugriff auf das Datenverzeichnis auf den Benutzer "+ mysql" beschränkt. XtraBackup benötigt Zugriff auf dieses Verzeichnis, um seine Backups zu erstellen. Führen Sie daher einige Befehle aus, um sicherzustellen, dass der zuvor als Mitglied der mysql-Gruppe eingerichtete Systembenutzer über die folgenden Berechtigungen verfügt:

sudo chown -R mysql: /var/lib/mysql
sudo find /var/lib/mysql -type d -exec chmod 770 "{}" \;

Diese Befehle stellen sicher, dass alle Verzeichnisse im Datenverzeichnis für die mysql-Gruppe zugänglich sind und vor jeder Sicherung ausgeführt werden sollten.

If you added your user to the mysql group in the same session, you will need to login again for the group membership changes to take effect.

Ein Backup erstellen

Jetzt können wir das Backup erstellen. Verwenden Sie dazu bei laufender MySQL-Datenbank das Hilfsprogramm + innobackupex +. Führen Sie diesen Befehl aus, nachdem Sie den Benutzer und das Kennwort entsprechend dem Login Ihres MySQL-Benutzers aktualisiert haben:

innobackupex --user=  --password= --no-timestamp /data/backups/new_backup

Dies erstellt ein Backup der Datenbank an dem angegebenen Ort, + / data / backups / new_backup +:

innobackupex outputinnobackupex: Backup created in directory '/data/backups/new_backup'
150420 13:50:10  innobackupex: Connection to database server closed
150420 13:50:10  innobackupex: completed OK!
  • Alternativ * können Sie das + - no-timestamp + weglassen, damit XtraBackup ein Sicherungsverzeichnis basierend auf dem aktuellen Zeitstempel erstellt.

innobackupex --user=  --password= /data/backups

Dadurch wird eine Sicherungskopie der Datenbank in einem automatisch generierten Unterverzeichnis erstellt:

innobackupex output - no timestampinnobackupex: Backup created in directory '/data/backups/'
150420 13:50:10  innobackupex: Connection to database server closed
150420 13:50:10  innobackupex: completed OK!

Jede Methode, für die Sie sich entscheiden, sollte in der letzten Zeile der Ausgabe "innobackupex: finished OK!" Ausgeben. Eine erfolgreiche Sicherung führt zu einer Kopie des Datenbank-Datenverzeichnisses, das * vorbereitet * werden muss, bevor es verwendet werden kann.

Backup vorbereiten

Der letzte Schritt beim Erstellen eines Hot-Backups mit XtraBackup ist das * Vorbereiten *. Dazu muss das Transaktionsprotokoll erneut abgespielt werden, um nicht festgeschriebene Transaktionen auf die Sicherung anzuwenden. Durch das Vorbereiten der Sicherung werden die Daten konsistent und können für eine Wiederherstellung verwendet werden.

Nach unserem Beispiel bereiten wir das Backup vor, das in + / data / backups / new_backup + erstellt wurde. Ersetzen Sie dies durch den Pfad zu Ihrer tatsächlichen Sicherung:

innobackupex --apply-log /data/backups/

Auch hier sollte als letzte Ausgabezeile "innobackupex: complete OK!" Angezeigt werden.

Ihre Datenbanksicherung wurde erstellt und kann zum Wiederherstellen Ihrer Datenbank verwendet werden. Wenn Sie über ein Dateisicherungssystem verfügen, z. B. Bacula, sollte diese Datenbanksicherung durchgeführt werden als Teil Ihrer Sicherungsauswahl enthalten.

Im nächsten Abschnitt erfahren Sie, wie Sie Ihre Datenbank aus der soeben erstellten Sicherung wiederherstellen.

Führen Sie eine Sicherungswiederherstellung durch

Das Wiederherstellen einer Datenbank mit XtraBackup setzt voraus, dass die Datenbank gestoppt und ihr Datenverzeichnis leer ist.

Beenden Sie den MySQL-Dienst mit folgendem Befehl:

sudo service mysql stop

Verschieben oder löschen Sie dann den Inhalt des Datenverzeichnisses (+ / var / lib / mysql). In unserem Beispiel verschieben wir es einfach an einen temporären Speicherort:

mkdir /tmp/mysql
mv /var/lib/mysql/* /tmp/mysql/

Jetzt können wir die Datenbank aus Ihrer Sicherung "Neue Sicherung" wiederherstellen:

innobackupex --copy-back /data/backups/

Wenn dies erfolgreich war, sollte in der letzten Ausgabezeile "innobackupex: complete OK!"

Die wiederhergestellten Dateien in datadir gehören wahrscheinlich dem Benutzer, unter dem Sie den Wiederherstellungsprozess ausgeführt haben. Ändern Sie den Eigentümer wieder in mysql, damit MySQL die Dateien lesen und schreiben kann:

sudo chown -R mysql: /var/lib/mysql

Jetzt können wir MySQL starten:

sudo service mysql start

Das ist es! Ihre wiederhergestellte MySQL-Datenbank sollte betriebsbereit sein.

Fazit

Nachdem Sie mit Percona XtraBackup Hot-Backups Ihrer MySQL-Datenbank erstellen können, sollten Sie einige Dinge in Betracht ziehen, die Sie einrichten sollten.

Zunächst ist es ratsam, den Prozess zu automatisieren, damit Backups nach einem Zeitplan erstellt werden. Zweitens sollten Sie Remote-Kopien der Sicherungen erstellen, falls Ihr Datenbankserver Probleme hat, indem Sie beispielsweise https://www.digitalocean.com/community/tutorials/how-to-use-rsync-to-sync-local verwenden -and-remote-directorys-on-a-vps [rsync], ein Netzwerkdateisicherungssystem wie https://www.digitalocean.com/community/tutorials/how-to-install-bacula-server-on-ubuntu- 14-04 [Bacula] oder DigitalOcean backups. Anschließend sollten Sie Ihre Sicherungen (Löschen alter Sicherungen nach einem Zeitplan) rotieren und inkrementelle Sicherungen (mit XtraBackup) erstellen, um Speicherplatz zu sparen.

Viel Glück!