Mydumper

Aus mxlinuxusers.de
(Weitergeleitet von Myloader)

mydumper ist ein Tool zum Sichern von MySQL/MariaDB-Datenbanken, das wesentlich schneller ist als das mit MySQL vertriebene Tool mysqldump. Es hat auch die Fähigkeit, die binären Protokolle vom Remote-Server zur gleichen Zeit wie den Dump selbst abzurufen. Die Vorteile von mydumper sind:

  • Geschwindigkeit durch Parallelisierung und Leistung (vermeidet teure Zeichensatzkonvertierungsroutinen, insgesamt effizienter Code)
  • Einfachere Verwaltung der Ausgabe (separate Dateien für Tabellen, Dump-Metadaten usw., einfaches Anzeigen/Parsen der Daten)
  • Konsistenz - behält den Snapshot über alle Threads hinweg bei, bietet genaue Master- und Slave-Protokollpositionen usw.
  • Verwaltbarkeit - unterstützt reguläre Ausdrücke (PCRE) um die zu sichernden bzw. nicht zu sichenden Datenbanken festzulegen

Da ein Backup nichts taugt, wenn man es nicht wieder zurückspielen kann, ist das dafür vorgesehene Werkzeug myloader ebenfalls mit enthalten.

mydumper[Bearbeiten | Quelltext bearbeiten]

Benutzung[Bearbeiten | Quelltext bearbeiten]

Vorbemerkung: für alle Beispiele gilt, dass mit USER und PASSWORT der jeweilige Datenbank-Username und sein Datenbankpasswort eingesetzt werden muss und nicht der Linux-Username und dessen Passwort. Diese können natürlich identisch sein, müssen es aber nicht sein.

Die wohl einfachste Form des Aufrufs sieht so aus:

mydumper -u USER -p PASSWORT

damit greift sich mydumper alle Datenbanken, auf die der USER mit dem Passwort PASSWORT zugreifen darf und sichert alle im Verzeichnis export-YYYYMMDD-HHmmss, wobei YYYYMMDD das jeweilige Datum und HHmmss die Uhrzeit bezeichnen. Am 18.12.2020 um 19:50 und 32 Sekunden würde also dieser Verzeichnisname entstehen

export-20201218-195032/

möchte man nur eine bestimmte Datenbank sichern, so kann mit der Option --database oder -B der Name der Datenbank angegeben werden

mydumper -u USER -p PASSWORT -B MEINE-DB

es ist auch möglich mit der Option --tables-list oder -T nur bestimmte Tabellen aus einer Datenbank zu sichern. Dazu werden die Namen der gewünschten Tabellen durch Komma getrennt angegeben.

Wichtig: die Tabellennamen dürfen nur durch Komma getrennt werden, ein zusätzliches Leerzeichen ist nicht möglich: -T tabelle1, tabelle2 würde nur tabelle1 sichern, richtig ist also -T tabelle1,tabelle2

mydumper -u USER -p PASSWORT -B MEINE-DB -T tabelle1,tabelle2

Mit regulären Ausdrücken (Regexp) nach der Option --regex oder -x können auch gewünschte Datenbanken ein- oder ausgeschlossen werden

mydumper -u USER -p PASSWORT --regex '^(mysql\.|test\.)'

sichert nur die Datenbanken mysql und test

mydumper -u USER -p PASSWORT --regex '^(?!(mysql\.|test\.))'

sichert alle Datenbanken, deren Namen nicht mit mysql oder test anfangen.

mydumper kann auch als Daemon (im Hintergrund) laufen. Dabei wird es nur einmal gestartet und sichert in einstellbaren Intervallen die gewünschten Daten. Für die zu sichernden Daten können alle hier angeführten Optionen benutzt werden.

mydumper --daemon --snapshot-interval=60 --logfile=dump.log

aller 60 Minuten wird ein Schnappschuss aller ereichbaren Datenbanken gesichert.

Optionen[Bearbeiten | Quelltext bearbeiten]

in der Spalte myloader werden die Optionen, die mydumper und myloader gemeinsam haben, durch ein Sternchen * gekennzeichnet. Die restlichen Optionen von myloader siehe in der Tabelle myloader Optionen

wichtige Optionen von mydumper
Option Bedeutung myloader
--help, -? zeigt die Hilfe an *
--defaults-file Datei liest Optionen aus der angegebenen Datei ein. Wird die Datei nicht gefunden oder ist nicht lesbar, so wird dies ohne Fehlermeldung ignoriert *
--host, -h Hostname des MySQL-Servers (default localhost) *
--user, -u MySQL Username *
--password, -p Passwort des MySQL Users *
--ask-password, -a Passwort des Datenbank-Users wird interaktiv abgefragt *
--port, -P Port für die MySQL Verbindung *
--socket, -S UNIX domain socket für die DB-Verbindung *
--database, -B Name der Datenbank *
--tables-list, -T durch Komma getrennte Liste der zu sichernden Tabellen (ohne Leerzeichen in der Liste!)
--threads, -t Anzahl benutzter Threads für die Sicherung (default 4) *
--outputdir, -o Name des Verzeichnisses in dem die Sicherungsdaten abgelegt werden sollen (default ist export-YYYYMMDD-HHMMSS)
--compress, -c Komprimiere die Sicherungsdateien *
--build-empty-files, -e wenn keine Daten gesichert werden (warum auch immer), trotzdem leere Sicherungsdatei anlegen
--regex, -x Regulärer Ausdruck (PCRE = Perl-Syntax) mit dem die zu sichernden bzw. auszuschliessenden Datenbanken und Tabellen bestimmt werden
--omit-from-file, -O Datei mit einer Liste von auszuschliessenden Datenbanken und Tabellen. Jeder Eintrag in einer einzelnen Zeile. Beispiel:
DB1.tab1
DB1.tab2
DB2.tab1

aus DB1 sollen die Tabellen tab1 und tab2 und aus der DB2 die Tabelle tab1 nicht gesichert werden. Diese Einträge haben Vorrang vor regulären Ausdrücken nach der Option --regex

--no-schemas, -m keine Schemas sichern
--no-data, -d Tabellendaten nicht sichern
--routines, -R sichere auch DB-Prozeduren und -Funktionen
--no-views, -W keine Sichten (Views) sichern
--long-query-guard, -l Timeout für zu lang dauerende Abfragen in Sekunden (default 60)
--kill-long-queries, -K Lange laufende Abfragen beenden, anstatt die Sicherung abzubrechen
--version, -V zeige nur die Versionsnr. von mydumper und exit *
--verbose, -v Einstellung wie ausführlich die Programmmeldungen sein sollen. 0 = keine Meldungen, 1 = nur Fehlermeldungen, 2 = auch Warnungen, 3 = auch Infos (sehr ausführlich). Default = 2 *
--daemon, -D mydumper startet im Hintergrund (als Daemon)
--snapshot-interval, -I Zeitraum zwischen jeder neuen Sicherung in Minuten (default 60 Minuten), funktioniert nur in Verbindung mit der Option --daemon
--logfile, -L Name der Datei, in die die Log-Meldungen geschrieben werden sollen. Ohne diese Angabe erfolgen Meldungen direkt aufs Terminal
--chunk-filesize -F Teilt Tabellen in Stücke dieser Dateigröße auf. Wert wird in MB angegeben

myloader[Bearbeiten | Quelltext bearbeiten]

Benutzung[Bearbeiten | Quelltext bearbeiten]

Das zurückspielen von gesicherten Datenbanken erfolgt über myloader. In den meisten Fällen genügt ein Aufruf in dieser Form:

myloader -d VERZEICHNIS -u USER -p PASSWORT -o

VERZEICHNIS: der Pfad zu dem Verzeichnis, in dem sich die Sicherung befindet.

USER und PASSWORT: wie bei mydumper der jeweilige Datenbank-Username und sein Datenbankpasswort.

Die Option -o ist nicht unbedingt erforderlich, wird aber dringend empfohlen. Dadurch werden eventuell noch vorhandene Tabellen vor der Wiederherstellung gelöscht. Damit wird sichergestellt, daß noch vorhandene Tabelleneinträge nach der Sicherung nicht plötzlich doppelt vorhanden sind, was leider trotz ausgegebener Warnungen passiert, wie folgendes Beispiel zeigt:

MariaDB [lager]> select * from produkte;
+------+--------+---------+
| id   | name   | bestand |
+------+--------+---------+
|    1 | Hammer |     200 |
|    2 | Feile  |     100 |
+------+--------+---------+

Sichern der Datenbank lager:

mydumper -u dbuser -p geheim -B lager

Zurückspielen der gesicherten Datenbank lager ohne Option -o

myloader -d export-20201229-232245 -u dbuser -p geheim
** (myloader:15927): CRITICAL **: 23:27:41.231: Error restoring lager.produkte from file lager.produkte-schema.sql: Table 'produkte' already exists

dies wirft die Fehlermeldung aus, schützt aber nicht davor, die Daten zurückzuspielen. Als Resultat erhält man ein so sicher nicht gewünschtes Ergebnis mit doppelten Daten:

MariaDB [lager]> select * from produkte;
+------+--------+---------+
| id   | name   | bestand |
+------+--------+---------+
|    1 | Hammer |     200 |
|    2 | Feile  |     100 |
|    1 | Hammer |     200 |
|    2 | Feile  |     100 |
+------+--------+---------+

anders und viel sicherer der Aufruf von myloader mit Option -o

myloader -d export-20201229-232245 -u dbuser -p geheim -o

keine Warnung, und auch die Datenbank wird wieder so hergestellt, wie es sein soll:

MariaDB [lager]> select * from produkte;
+------+--------+---------+
| id   | name   | bestand |
+------+--------+---------+
|    1 | Hammer |     200 |
|    2 | Feile  |     100 |
+------+--------+---------+

Optionen[Bearbeiten | Quelltext bearbeiten]

wichtige Optionen von myloader
Option Bedeutung
-d, --directory Verzeichnis, in dem sich die Sicherung befindet, die zurückgespielt werden soll (muss angegeben werden)
-q, --queries-per-transaction Anzahl der Anfragen pro Transaktion, default = 1000
-o, --overwrite-tables Tabellen die schon existieren werden vorher gelöscht (DROP TABLE)
-B, --database <DB-NAME> Sicherung wird in eine andere DB mit dem Namen DB-NAME zurückgeschrieben. Dies ist praktisch, wenn man eine Datenbank clonen möchte, also eine genaue Kopie der Datenbank herstellen, nur unter anderem Namen (z.B. für Testläufe)
-s, --source-db <DB-NAME> Name der Datenbank, die wieder hersgestellt werden soll

ausser den hier angeführten Optionen besitzt myloader noch solche, die auch bei mydumper angeführt sind. Deren Bedeutung kann also bei Bedarf in der Tabelle mydumper-Optionen nachgesehen werden. Dabei handelt es sich um diese Optionen:

 -h, --host
 -u, --user
 -p, --password
 -a, --ask-password
 -P, --port
 -S, --socket
 -t, --threads
 -C, --compress-protocol
 -V, --version
 -v, --verbose
 --defaults-file