Contents
Der Bedarf an MySQL-Datenbank-Backups ist nicht so universell wie der Bedarf an regelmäßigen Endbenutzer-Backups, aber wenn es erforderlich ist, wird es ein besonders wichtiger Teil der Infrastruktur eines Unternehmens. Bacula Enterprise’s Modul für MySQL-Backups ermöglicht es Anwendern, effiziente und benutzerfreundliche MySQL-Datenbank-Backups – und noch wichtiger, Wiederherstellungen – in sehr kurzer Zeit durchzuführen. Dies ist natürlich entscheidend für die Einhaltung von RTOs (Recovery Time Objectives). Dieser Artikel befaßt sich eingehend mit der Natur des Backup-Prozesses, der Bacula Enterprise so viel besser macht als seine Konkurrenten, einschließlich verschiedener Ansätze für Backup und Wiederherstellung sowie verschiedener Anpassungsmöglichkeiten.
Verschiedene Möglichkeiten, ein MySQL-Datenbank-Backup zu erstellen
Bevor wir uns mit der Lösung von Bacula Enterprise befassen, wollen wir einige der verschiedenen, eher unkonventionellen Möglichkeiten zur Erstellung eines MySQL-Datenbank-Backups erläutern.
1. Linux-basiertes automatisches MySQL-Datenbank-Sicherung
Ein bestimmtes Linux/Unix-basiertes Dienstprogramm mit dem Namen cron kann MySQL-Backups auf diesen Systemen durchführen. Es handelt sich um ein relativ einfaches Dienstprogramm, das mit dem System startet und seine Anweisungen aus einer bestimmten Datei liest. Diese Konfigurationsdatei ist normalerweise in der Datei /etc/crontab gespeichert. Hier ist ein Beispiel für ein tägliches Backup um 2:30 Uhr:
30 2 * * * root mysqldump -u root -pPASSWORD –all-databases | gzip >
/mnt/disk2/database_`data ‚ %m-%d-%Y’`.sql.gz
Die ersten fünf Ziffern des Befehls stehen für die Uhrzeit und das Datum (Minuten, Stunden, Tage des Monats, Monate, Wochentage), und wenn Sie „*“ anstelle einer dieser Ziffern eingeben, funktioniert jede Zahl.
2. PHP zur Erstellung einer XML-Datei verwenden
Es ist auch möglich, Ihre Datenbank mit Hilfe von PHP als XML-Datei neu zu erstellen. Es ist nicht das sicherste Format der Welt, wenn es um die Wiederherstellung Ihrer Daten geht, aber manche Leute ziehen es allen anderen vor. Mit dem folgenden Codeschnipsel können Sie eine bestimmte Datenbank in eine Datei im XML-Format exportieren:
//connect
$link = mysql_connect($host,$user,$pass);
mysql_select_db($name,$link);
//get all the tables
$query = ‚SHOW TABLES FROM ‚.$name;
$result = mysql_query($query,$link) or die(‚cannot show tables‘);
if(mysql_num_rows($result))
{
//prep output
$tab = „\t“;
$br = „\n“;
$xml = ‚<?xml version=“1.0″ encoding=“UTF-8″?>‘.$br;
$xml.= ‚<database name=“‚.$name.'“>‘.$br;
//for every table…
while($table = mysql_fetch_row($result))
{
//prep table out
$xml.= $tab.'<table name=“‚.$table[0].'“>‘.$br;
//get the rows
$query3 = ‚SELECT * FROM ‚.$table[0];
$records = mysql_query($query3,$link) or die(‚cannot select from table: ‚.$table[0]);
//table attributes
$attributes = array(’name‘,’blob‘,’maxlength‘,’multiple_key‘,’not_null‘,’numeric‘,’primary_key‘,’table‘,’type‘,’default‘,’unique_key‘,’unsigned‘,’zerofill‘);
$xml.= $tab.$tab.'<columns>‘.$br;
$x = 0;
while($x < mysql_num_fields($records))
{
$meta = mysql_fetch_field($records,$x);
$xml.= $tab.$tab.$tab.'<column ‚;
foreach($attributes as $attribute)
{
$xml.= $attribute.’=“‚.$meta->$attribute.'“ ‚;
}
$xml.= ‚/>‘.$br;
$x++;
}
$xml.= $tab.$tab.'</columns>‘.$br;
//stick the records
$xml.= $tab.$tab.'<records>‘.$br;
while($record = mysql_fetch_assoc($records))
{
$xml.= $tab.$tab.$tab.'<record>‘.$br;
foreach($record as $key=>$value)
{
$xml.= $tab.$tab.$tab.$tab.'<‚.$key.‘>‘.htmlspecialchars(stripslashes($value)).'</‘.$key.‘>‘.$br;
}
$xml.= $tab.$tab.$tab.'</record>‘.$br;
}
$xml.= $tab.$tab.'</records>‘.$br;
$xml.= $tab.'</table>‘.$br;
}
$xml.= ‚</database>‘;
//save file
$handle = fopen($name.‘-backup-‚.time().‘.xml‘,’w+‘);
fwrite($handle,$xml);
fclose($handle);
}
3. PHP von vornherein als Backup-Methode verwenden
Eine weitere Möglichkeit, PHP für Ihre Backup-Bedürfnisse zu nutzen, besteht darin, eine Datenbank-Backup-Abfrage aus einer PHP-Datei zu nehmen und diese zu verwenden. Die Abfrage im folgenden Beispiel ist SELECT INTO OUTFILE.
<?php
include ‚config.php‘;
include ‚opendb.php‘;
$tableName = ‚mypet‘;
$backupFile = ‚backup/mypet.sql‘;
$query = „SELECT * INTO OUTFILE ‚$backupFile‘ FROM $tableName“;
$result = mysql_query($query);
include ‚closedb.php‘;
?>
Und natürlich brauchen Sie auch eine Möglichkeit, diesen Sicherungstyp wiederherzustellen. Hier ist die Abfrage dafür, es ist die LOAD DATA INFILE-Abfrage:
<?php
include ‚config.php‘;
include ‚opendb.php‘;
$tableName = ‚mypet‘;
$backupFile = ‚mypet.sql‘;
$query = „LOAD DATA INFILE ‚backupFile‘ INTO TABLE $tableName“;
$result = mysql_query($query);
include ‚closedb.php‘;
?>
4. MySQL-Datenbank Sicherung über SSH
Ein Backup über SSH ist selbst für besonders große MySQL-Datenbanken machbar. Aktivieren Sie in Ihrem Plesk-Panel zunächst den Shell-Zugriff und verwenden Sie dann ein beliebiges Tool, das über SSH auf den betreffenden Server zugreifen kann (PuTTY oder ein ähnliches Tool). Zunächst müssen Sie jedoch ein Zielverzeichnis für Ihr künftiges Backup angeben:
CD wwwroot/dbbackup
Dann verwenden Sie mysqldump, um Ihre Datenbank in eine bestimmte Datei innerhalb des Servers zu exportieren:
mysqldump –add-drop-table -u db_username -p db_name > mybackup.sql
5. Server-Shell-Skript zur Sicherung einer MySQL-Datenbank über Ubuntu
Wenn Sie einen dedizierten VPS-Server mit Ubuntu Linux an Bord haben, haben Sie eine weitere Möglichkeit. Sie können ein spezielles Shell-Skript verwenden, um alle Ihre Datenbanken auf Ihrem FTP-Server zu sichern. Hier ist ein Beispiel:
#!/bin/bash
### MySQL Server Login Info ###
MUSER=“root“
MPASS=“MYSQL-ROOT-PASSWORD“
MHOST=“localhost“
MYSQL=“$(which mysql)“
MYSQLDUMP=“$(which mysqldump)“
BAK=“/backup/mysql“
GZIP=“$(which gzip)“
### FTP SERVER Login info ###
FTPU=“FTP-SERVER-USER-NAME“
FTPP=“FTP-SERVER-PASSWORD“
FTPS=“FTP-SERVER-IP-ADDRESS“
NOW=$(date +“%d-%m-%Y“)
### See comments below ###
### [ ! -d $BAK ] && mkdir -p $BAK || /bin/rm -f $BAK/* ###
[ ! -d „$BAK“ ] && mkdir -p „$BAK“
DBS=“$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse ’show databases‘)“
for db in $DBS
do
FILE=$BAK/$db.$NOW-$(date +“%T“).gz
$MYSQLDUMP -u $MUSER -h $MHOST -p$MPASS $db | $GZIP -9 > $FILE
done
lftp -u $FTPU,$FTPP -e „mkdir /mysql/$NOW;cd /mysql/$NOW; mput /backup/mysql/*; quit“ $FTPS
Nachdem Sie dieses Segment als .sh-Datei gespeichert haben, müssen Sie als Nächstes die richtige Berechtigungsstufe für diese spezielle Datei einrichten:
$ chmod +x /home/your-name/mysql.backup.sh
Von nun an können Sie einen der beiden Befehle eingeben, um den Sicherungsvorgang zu starten:
/home/your-name/mysql.backup.sh
Oder:
sudo /home/your-name/mysql.backup.sh
Sie können dieses Skript auch als cron-Job ausführen lassen. Hier ist ein Beispiel für ein Skript, das täglich um Mitternacht ausgeführt wird und aus zwei verschiedenen Befehlseingaben besteht:
$ sudo crontab -e
Und:
@midnight /home/you/mysql.backup.sh >/dev/null 2>&1
Diese Skripte können auch mit anderen UNIX- oder Linux-Distributionen verwendet werden.
6. Verwendung von phpMyAdmin
phpMyAdmin ist ein kostenloses Open-Source-Tool, das sowohl mit MySQL- als auch mit MariaDB-Datenbanken funktioniert. Die richtige Reihenfolge der Eingaben ist wie folgt:
- Öffnen Sie das betreffende Tool;
- Wählen Sie Ihre Datenbank aus, von der Sie ein Backup erstellen möchten;
- Wählen Sie die Option „Exportieren“ in der Navigationsleiste;
- Klicken Sie auf die Zeile „Alle möglichen Optionen anzeigen“;
- Wählen Sie die spezifischen Tabellen aus, die Sie gesichert haben möchten;
- Ändern Sie den Komprimierungstyp (oder belassen Sie es bei gzipped, dies wird empfohlen);
- Starten Sie das Backup, indem Sie auf die Schaltfläche „Los“ klicken.
Damit ist unsere Liste der relativ populären Backup-Optionen für Ihre grundlegenden MySQL-Datenbank-Backup-Bedürfnisse abgeschlossen.
Der Zweck des MySQL-Backup-Moduls mit Bacula Enterprise
Der allgemeine Zweck des MySQL-Backup-Moduls von Bacula Enterprise ist es, sowohl die Backup- als auch die Restore-Prozesse zu vereinfachen und gleichzeitig zu beschleunigen. Bei der Verwendung dieses Moduls muss der Backup-Administrator nicht alle Ins und Outs der MySQL-Backup-Techniken kennen, und es sind auch keine Kenntnisse im Schreiben von Skripten erforderlich. Das Modul selbst ist in der Lage, eine Vielzahl verschiedener Funktionen auszuführen, einschließlich der automatischen Sicherung von Konfigurationsdateien und anderen wichtigen Systemdaten. Es gibt zwei Haupt-Backup-Methoden: Dump und Binär.
Binär oder Dump?
Da es zwei Haupt-Backup-Techniken gibt, ist es besser, einen direkten Vergleich einiger ihrer Eigenschaften in der folgenden Tabelle darzustellen.
Funktionen | Binär | Dump |
Wiederherstellung eines einzelnen Objekts | Nein | Ja* |
Backup-Größe | Groß | Klein |
Sicherungsgeschwindigkeit | Schnell | Langsam |
Wiederherstellungsgeschwindigkeit | Schnell | Sehr langsam |
Wiederherstellung zu einem beliebigen Zeitpunkt möglich | Ja | Ja |
Unterstützung für differenzielle und inkrementelle Sicherungsarten | Ja | Ja |
Konsistenz | Ja | Ja |
Online-Sicherung | Ja | Ja |
Wiederherstellung auf eine frühere Hauptversion von MySQL | Nein | Ja** |
Wiederherstellung auf eine neuere Hauptversion von MySQL | Nein | Ja |
* Für die Wiederherstellung eines einzelnen Objekts ist die manuelle Bearbeitung einer Dump-Datei erforderlich.
** Die manuelle Bearbeitung der SQL-Datei kann erforderlich sein, um einen SQL-Dump in einer älteren MySQL-Version wiederherzustellen, wenn Sie Funktionen verwenden, die in der älteren Version nicht verfügbar sind. Im Allgemeinen ist die Wiederherstellung einer älteren MySQL-Version nicht garantiert und wird nicht unterstützt.
Wie es funktioniert: Binärer Modus
Das Hauptarbeitsprinzip des Binärmodus ist seine Interaktion mit Percona XtraBackup, die es ihm ermöglicht, den Backup-Prozess durchzuführen, ohne ihn zu Beginn zu stoppen. Er ist in der Lage, mit InnoDB, XtraDB, MyISAM und anderen Tabellen mit unmodifiziertem MySQL oder mit einem Percona-Server mit XtraDB zu arbeiten.
Früher gab es zwei Hauptwege, um eine Datenbankkopie durchzuführen. Die erste bestand darin, die aktive Datenbank zu kopieren, und bei dieser Methode war die Wahrscheinlichkeit ziemlich hoch, dass die Kopie alle möglichen Unstimmigkeiten enthielt oder dass einfach alle Änderungen fehlten, die in der Datenbank während des Zeitraums, in dem die Kopie erstellt wurde, vorgenommen wurden. Die zweite Möglichkeit bestand darin, die Datenbank vollständig zu stoppen, um eine konsistente Kopie zu erstellen. Das Problem bei der zweiten Möglichkeit ist jedoch, dass jede Sekunde, in der die Datenbank eines Unternehmens nicht funktioniert, potenziell (und in der Regel) einen Einnahmeverlust bedeutet, unabhängig davon, wie kurz diese Unterbrechung ist.
Genau zu diesem Zweck bieten das MySQL-Percona-Modul von Bacula und das Percona XtraBackup-Tool eine effektive Lösung für dieses Problem, indem sie die Möglichkeit haben, vollständige oder inkrementelle Backups von jeder Art von laufenden und aktiven MySQL-Datenbanken zu erstellen. Ein weiterer Vorteil des Percona-verbundenen Modus ist, dass keine großen temporären Dateien verwendet werden müssen, die Duplikate der Daten sind, die Sie sichern oder wiederherstellen.
Der Wiederherstellungsprozess ist relativ einfach: Die Daten werden an einem temporären Ort wiederhergestellt und dann mit Hilfe der Funktion „prepare“ konsistent gemacht. Diese Funktion wäre bei anderen Lösungen sehr ressourcenintensiv und nicht etwas, das man in einer dringenden Wiederherstellungssituation durchführen möchte. Um zu verhindern, dass der Wiederherstellungsprozess zu viel Zeit in Anspruch nimmt, wird die „Prepare“-Funktion von Bacula automatisch und im Voraus ausgeführt, direkt nachdem das Backup erstellt wurde. Dadurch verlängert sich der Backup-Prozess zwar geringfügig, aber der Wiederherstellungsprozess wird wesentlich schneller. In Notfällen ist die Wiederherstellungszeit viel kritischer als die Backup-Zeit. Handelt es sich bei der fraglichen Datenbank um eine extrem große Datenbank mit vielen Transaktionen, kann dieser Zeitunterschied sogar den Unterschied ausmachen, ob ein Unternehmen überhaupt noch in der Lage ist, seine Geschäfte weiterzuführen.
Die Notwendigkeit dieser Kombination aus dem Bacula Enterprise MySQL Percona-Modul und den Percona-Werkzeugen ergibt sich aus der problematischen Existenz des traditionellen MySQL. Das Hauptproblem bei der Erstellung eines „mysqldump“ besteht darin, dass es sich nicht um ein echtes binäres Backup der Daten handelt, sondern dass der gesamte Prozess darin besteht, die gesamte Datenbank in eine große Menge von SQL-Anweisungen zu konvertieren und diese anschließend als Teil des Wiederherstellungsprozesses zu verarbeiten. Genau dieser Prozess wird extrem langsam, je größer Ihre Datenbank ist.
Die Percona-Werkzeuge sind nützlich, wenn es eine Situation gibt, in der MySQL im Allgemeinen stark belastet wird und sowohl Leistung als auch Stabilität erforderlich sind, damit das System ordnungsgemäß funktioniert.
Jedes Unternehmen, das seinen ausgefallenen Server sicher und schnell wiederherstellen muss, um sein Unternehmen vor schwerwiegenden Ausfällen oder sogar vor dem Konkurs zu schützen, kann die Vorteile dieser speziellen Kombination von Percona-Werkzeugen mit den Fähigkeiten von Bacula nutzen, um den Wiederherstellungsprozess in einer Unternehmensumgebung so schnell wie möglich zu gestalten.
Wie es funktioniert: Dump-Modus
Der Dump-Modus ist mehr oder weniger die „alte“ Backup-Option, die in bestimmten Fällen immer noch relevant ist. Er stützt sich auf die Protokolldateien, die während der Existenz der MySQL-Datenbank erstellt werden, und diese Protokolle werden vom Point-in-Time-Recovery-System verwendet, um verschiedene Aktionen mit Ihren Daten durchzuführen, wie z.B. Replikation, Schutz und so weiter.
Die Standard-Backup-Methode besteht darin, jede Ihrer Datenbanken separat zu sichern, was bedeutet, dass Ihre Daten nicht vollständig konsistent sind, wenn Sie mehrere Datenbanken wiederherstellen, die zu unterschiedlichen Zeitpunkten gesichert wurden und untereinander keine Konsistenz aufweisen. Dies ist ein großes Problem, wenn Sie mit mehreren Datenbanken gleichzeitig arbeiten. Baculas Lösung besteht darin, die Protokolldateien zu speichern, die während der einzelnen Sicherungsvorgänge erzeugt werden, und diese Dateien dann abzuspielen, um sicherzustellen, dass alle Datenbanken zu einem bestimmten Zeitpunkt global konsistent sind.
Es gibt auch eine andere, globalere Lösung für das Problem – die Option all_databases. Sie ermöglicht es, alle Datenbanken auf einmal zu sichern, so dass Sie sicher sein können, dass Ihre Datenbanken konsistent sind und Sie mehrere inkrementelle Sicherungen nach dieser vollständigen Sicherung durchführen können, ohne eine globale Inkonsistenz befürchten zu müssen.
Es gibt eine spezifische Liste von Dateien, die der MySQL-Agent im Bacula-Katalog für einen einzelnen „Test“ Ihrer Datenbank erzeugt. Sie können diese Dateieinträge und ihre Bedeutung in der untenstehenden Tabelle sehen.
Dateiname | Anwendung | Beschreibung |
global-grants.sql | global | vereinheitlichte Liste, die alle Benutzer, ihre Passwörter und andere spezifische Daten angibt |
createdb.sql | database | Skript zur Erstellung der Datenbank |
grants.sql | database | Eine Liste mit allen Benutzern, die mit dieser Datenbank verbunden sind |
data.sql | database | Die Daten Ihrer Datenbank im Dump-Format |
settings.txt | global | aktuelle Variablen des MySQL-Servers |
schema.sql | database | Skript zur Erstellung des Datenbankschemas |
my.cnf | global | Serverkonfigurationsdaten für MySQL |
MySQL-Wiederherstellungsmodi
Der MySQL-Agent von Bacula kann mehrere verschiedene Wiederherstellungsmodi anbieten, wie z.B:
- Wiederherstellung einer einzelnen Datenbank;
- Wiederherstellung von Dump- oder Binär-Logs;
- Punkt-zu-Zeit-Wiederherstellung;
- Wiederherstellung von Benutzern und Rollen.
Wie bereits erwähnt, nutzt Bacula Enterprise mit seinem MySQL-Agenten die Percona-Tools, um alle Informationen über ein Backup im Binärmodus wiederherzustellen.
Fazit
Neue Technologien in allen Umgebungen werden ständig weiterentwickelt. Aus diesem Grund profitieren die meisten Unternehmen von einer Backup-Lösung, die sich regelmäßig erneuert und sicherstellt, dass sie alle Arten von Technologien in einer IT-Abteilung oder einem Rechenzentrum abdecken kann – unabhängig davon, ob es sich um neue oder alte Technologien handelt. Das Ergebnis einer modernen, innovativen Backup-Lösung sind in der Regel kürzere RTOs und RPOs, ein geringerer Wartungsaufwand, niedrigere Kosten und eine wesentlich höhere Sicherheit. Bacula Enterprise ist ein gutes Beispiel für einen solchen Anbieter von Backup-Lösungen.