Hot Backups von MySQL-Datenbanken mit Percona XtraBackup auf Ubuntu 16.04 durchführen.
Percona XtraBackup ist ein Open-Source-Backup-Programm für MySQL. Es unterstützt alle MySQL-Varianten wie Percona Server, MariaDB und (Oracle) MySQL. Percona Xtrabackup führt ein Hot Backup für MySQL durch. Hot Backup bedeutet, ein Backup eines MySQL-Servers zu erstellen, während er ohne Ausfallzeiten läuft.
In diesem Tutorial zeige ich Ihnen, wie Sie mit dem OpenSource-Tool Percona XtraBackup auf Ubuntu 16.04 (Xenial Xerus) ein Hot MySQL Datenbank-Backup erstellen können. Ich werde MariaDB als Datenbankserver verwenden, um das Backup durchzuführen, aber das gleiche Setup funktioniert auch für MySQL-Server.
Voraussetzung
- Ubuntu-Server 16.04 – (Xenial Xerus)
- MySQL oder MariaDB Server
- Root-Privilegien
Schritt 1 – Percona XtraBackup installieren
Der erste Schritt ist die Installation der neuesten Percona XtraBackup-Software auf unserem Ubuntu-Server. Melden Sie sich per SSH (oder über die Konsole) auf Ihrem Server an:
ssh root@192.168.1.15 TYPE YOUR PASSWORD
Percona XtraBackup ist im Ubuntu-Repository verfügbar, aber wir wollen die neueste Version aus dem Percona-Repository verwenden.
Fügen Sie das Percona-Repository hinzu, indem Sie das deb-Paket aus dem Web herunterladen und mit dem Befehl dpkg installieren:
wget https://repo.percona.com/apt/percona-release_0.1-3.$(lsb_release -sc)_all.deb sudo dpkg -i percona-release_0.1-3.$(lsb_release -sc)_all.deb
Als nächstes aktualisieren Sie das Repository und installieren Ppercona XtraBackup 2.4 (die aktuell neueste Version):
sudo apt-get update sudo apt-get install percona-xtrabackup-24
Percona XtraBackup ist installiert.
Schritt 2 – Benutzer- und Backup-Verzeichnis konfigurieren
Um das Hot Backup durchzuführen, müssen wir einen neuen mysql-Benutzer mit speziellen Privilegien und Berechtigungen erstellen. In diesem Tutorial werde ich MariaDB 10.0 als Datenbankserver verwenden. Wenn Sie noch keine MySQL-kompatible Datenbank installiert haben, können Sie mit dem folgenden Befehl installieren:
sudo apt-get install mariadb-server mariadb-client
Setzen Sie mit diesem Befehl ein sicheres Passwort für den Root-Benutzer:
mysql_secure_installation
Wenn die MariaDB installiert ist, greifen Sie als root-Benutzer mit dem Befehl mysql client auf die MariaDB/MySQL-Shell zu:
mysql -u root -p TYPE MySQL PASSWORD
Erstellen Sie einen neuen Benutzer namens „bekupuser“ mit dem Passwort „mypassword“ (wählen Sie ein sicheres Passwort für Ihren Server!):
CREATE USER 'bekupuser'@'localhost' IDENTIFIED BY 'mypassword';
Vergeben Sie dem Benutzer die folgenden Berechtigungen: RELOAD, PROZESS, SPERRTABELLEN, REPLIKATIONSMANDANT‘.
GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'bekupuser'@'localhost'; FLUSH PRIVILEGES; exit
Als nächstes erstellen Sie ein neues Verzeichnis, um die MySQL-Backup-Dateien zu speichern:
mkdir -p /data/backups/mysql/
Der neue Backup-Benutzer und ein Backup-Verzeichnis wurden angelegt.
Schritt 3 – Backup mit Innobackupex durchführen
Innobackupex ist ein Perl-Skript-Wrapper für das xtrabackup-Programm. Es handelt sich um eine gepatchte Version des Innobackup-Skripts von oracle, das mit dem InnoDB Backup-Tool vertrieben wird. Innobackupex bietet Backup für eine ganze MySQL-Datenbankinstanz und verwendet xtrabackup in Kombination mit xbstream und xbcrypt.
In diesem Schritt werden wir ein vollständiges Backup für die MySQL-Instanz erstellen und vorbereiten.
A. Erstellen Sie ein Backup mit Innobackupex
In Schritt 2 haben wir ein neues Verzeichnis für die Sicherung erstellt und einen neuen mysql-Backup-Benutzer hinzugefügt. Wir werden sie jetzt verwenden, um ein Backup mit dem Befehl innobackupex zu erstellen.
Erstellen Sie mit der innobackupex ein MySQL-Backup in das neue Verzeichnis’/data/backups/my_backup‘:
innobackupex --user=bekupuser --password=mypassword --no-timestamp /data/backups/my_backup
Hinweis:
—Benutzer = Benutzer mit den erforderlichen Backup-Rechten (Schritt 2).
–password = Passwort des Backup-Benutzers.
—no-timestamp = deaktiviert die Erstellung eines neuen Unterverzeichnisses mit Zeitstempel im Backup-Root-Verzeichnis.
/data/backups/my_backup = Verzeichnis für die Sicherung, es wird automatisch während des Backup-Prozesses erstellt. Wenn das Verzeichnis existiert, erhalten Sie eine Fehlermeldung.
Eine andere Möglichkeit:
mkdir -p /data/backups/my_backup2
innobackupex –user=bekupuser –password=mypassword /data/backups/my_backup2
or
innobackupex –user=bekupuser –password=mypassword /data/backups/
Hinweis:
Wenn es kein Verzeichnis‘my_backup2‚ gibt, erhalten Sie Ihr Verzeichnis basierend auf dem Format‘timestamp‚.
Ergebnisse:
B. Vorbereitung eines vollständigen Backups mit Innobackupex
Nach der Erstellung eines neuen Backups sind die Daten nicht mehr für eine Wiederherstellung bereit. Es gibt noch einen weiteren Schritt, damit die Daten für die Wiederherstellung bereit sind. Wir brauchen die „Vorbereitungsphase“, damit die Daten wiederhergestellt werden können.
Backup vorbereiten mit innobackupex mit der Option –apply-log im Backup-Verzeichnis ‚/data/backups/my_backup‚:
innobackupex --apply-log /data/backups/my_backup
Stellen Sie sicher, dass der Prozess ohne Fehler abgeschlossen ist, bevor Sie fortfahren.
Wenn du genügend Speicher und eine große Datenbank hast, dann kannst du die Option –use-memory=memorynumber verwenden, um innobackupex mitzuteilen, wie viel Speicher es verwenden darf:
innobackupex --apply-log --use-memory=4G /data/backups/my_backup
Die Daten sind nun bereit für die Wiederherstellung. Wir können es auf dem gleichen Server oder auf einem anderen Server wiederherstellen, auf dem MariaDB läuft.
Schritt 4 – Vollständiges Backup mit Innobackupex wiederherstellen
In diesem Schritt werden wir die MySQL-Instanz mit innobackupex wiederherstellen.
Bevor wir die MySQL-Instanz wiederherstellen, müssen wir den MySQL-Prozess mit dem Befehl systemctl stoppen (der MariaDB-Prozess heißt mysql):
systemctl stop mysql
Machen Sie ein Backup des alten MySQL-Datenverzeichnisses:
mkdir ~/mysql_old/ mv /var/lib/mysql/* ~/mysql_old/
Als nächstes stellen Sie die mysql-Instanz aus dem Voll-Backup mit innobackupex wieder her:
innobackupex --copy-back /data/backups/my_backup
Wenn Sie das Ergebnis‘innobackupex: completed OK‚ sehen, dann haben Sie Ihre MySQL-Instanz erfolgreich wiederhergestellt.
Ändern Sie nun den Besitzer des MySQL-Datenverzeichnisses auf den mysql-Benutzer und starten Sie den Dienst erneut:
chown -R mysql:mysql /var/lib/mysql systemctl start mysql
Die MySQL-Instanz wurde mit percona-xtrabackup erfolgreich wiederhergestellt.