Zum Inhalt springen

Mariadb-dump/Anwendung

Aus Foxwiki

Anwendung

Mariadb-dump wird häufig verwendet, um eine Sicherungskopie einer gesamten Datenbank zu erstellen

shell> mariadb-dump db_name > backup-file.sql

Sie können die Sicherungsdatei folgendermaßen wieder in den Server laden

shell> mariadb db_name < backup-file.sql

Oder folgendermaßen

shell> mariadb -e "source /path-to-backup/backup-file.sql" db_name

mariadb-dump ist auch sehr nützlich, um Datenbanken durch Kopieren von Daten von einem MariaDB-Server auf einen anderen zu füllen

shell> mariadb-dump --opt db_name | mariadb --host=remote_host -C db_name

Es ist möglich, mehrere Datenbanken mit einem Befehl zu sichern

shell> mariadb-dump --databases db_name1 [db_name2 ...] > my_databases.sql

Um alle Datenbanken zu sichern, verwenden Sie die Option --all-databases

shell> mariadb-dump --all-databases > all_databases.sql

Für InnoDB-Tabellen bietet mariadb-dump eine Möglichkeit, eine Online-Sicherung zu erstellen

shell> mariadb-dump --all-databases --single-transaction all_databases.sql

Diese Sicherung erwirbt zu Beginn des Dumps eine globale Lesesperre für alle Tabellen (mit FLUSH TABLES WITH READ LOCK)

  • Sobald diese Sperre erworben wurde, werden die Koordinaten des Binärprotokolls gelesen und die Sperre wird aufgehoben
  • Wenn lange Aktualisierungsanweisungen ausgeführt werden, während die FLUSH-Anweisung ausgegeben wird, kann der MariaDB-Server blockiert werden, bis diese Anweisungen abgeschlossen sind
  • Danach ist der Speicherauszug frei von Sperren und stört Lese- und Schreibvorgänge in den Tabellen nicht mehr
  • Wenn die Aktualisierungsanweisungen, die der MariaDB-Server erhält, kurz sind (in Bezug auf die Ausführungszeit), sollte die anfängliche Sperrfrist selbst bei vielen Aktualisierungen nicht spürbar sein

Für die Wiederherstellung zu einem bestimmten Zeitpunkt (auch als "Roll-Forward" bekannt, wenn Sie eine alte Sicherung wiederherstellen und die Änderungen seit dieser Sicherung wiedergeben müssen) ist es oft nützlich, das Protokoll zu rotieren oder zumindest die Koordinaten des binären Protokolls zu kennen, denen der Speicherauszug entspricht

shell> mariadb-dump --all-databases --master-data=2 > all_databases.sql

Oder

shell> mariadb-dump --all-databases --flush-logs --master-data=2 > all_databases.sql

Die Optionen --master-data und --single-transaction können gleichzeitig verwendet werden, was eine bequeme Möglichkeit bietet, eine Online-Sicherung für die Verwendung vor einer Point-in-Time-Recovery zu erstellen, wenn Tabellen mit der InnoDB-Speicher-Engine gespeichert werden

Problembehebung

TMP

Verwendung

Es gibt vier allgemeine Möglichkeiten, mariadb-dump aufzurufen

shell> mariadb-dump [options] db_name [tbl_name ...]
shell> mariadb-dump [options] --databases db_name ..
shell> mariadb-dump [options] --all-databases
shell> mariadb-dump [options] --system=[option_list]

Wenn Sie nach db_name keine Tabellen benennen oder die Option --databases oder --all-databases verwenden, werden ganze Datenbanken ausgegeben

mariadb-dump gibt die Datenbank INFORMATION_SCHEMA (oder PERFORMANCE_SCHEMA, falls aktiviert) standardmäßig nicht aus

  • MariaDB erstellt einen Dump der INFORMATION_SCHEMA, wenn Sie sie in der Befehlszeile explizit benennen, obwohl Sie derzeit auch die Option --skip-lock-tables verwenden müssen

Um eine Liste der Optionen anzuzeigen, die Ihre Version von mariadb-dump unterstützt, führen Sie mariadb-dump --help aus

Pufferung

Zeile für Zeile vs Pufferung

mariadb-dump kann Tabelleninhalte zeilenweise abrufen und ausgeben oder den gesamten Inhalt einer Tabelle abrufen und vor der Ausgabe im Speicher puffern

  • Das Puffern im Speicher kann ein Problem darstellen, wenn Sie große Tabellen ausgeben
  • Um Tabellen zeilenweise auszugeben, verwenden Sie die Option --quick (oder --opt, die --quick aktiviert)
  • Die Option --opt (und damit --quick) ist standardmäßig aktiviert
  • Um die Speicherpufferung zu aktivieren, verwenden Sie daher --skip-quick

transaction_registry_table

mariadb-dump und die mysql.transaction_registry_table

mariadb-dump enthält Logik für die mysql.transaction_registry-Tabelle

  • mysqldump aus einer früheren MariaDB-Version kann nicht für MariaDB 10.3 und höher verwendet werden

Alte Versionen von MySQL

Wenn Sie eine aktuelle Version von mariadb-dump verwenden, um einen Dump zu erstellen, der in einen sehr alten MySQL-Server geladen werden soll, sollten Sie die Option --opt oder --extended-insert nicht verwenden

  • Verwenden Sie stattdessen --skip-opt

TMP

Verwendung

Es gibt vier allgemeine Möglichkeiten, mariadb-dump aufzurufen shell> mariadb-dump [options] db_name [tbl_name ...] shell> mariadb-dump [options] --databases db_name shell> mariadb-dump [options] --all-databases shell> mariadb-dump [options] --system=[option_list]

Wenn Sie nach db_name keine Tabellen benennen oder die Option --databases oder --all-databases verwenden, werden ganze Datenbanken ausgegeben

mariadb-dump gibt die Datenbank INFORMATION_SCHEMA (oder PERFORMANCE_SCHEMA, falls aktiviert) standardmäßig nicht aus

  • MariaDB erstellt einen Dump der INFORMATION_SCHEMA, wenn Sie sie in der Befehlszeile explizit benennen, obwohl Sie derzeit auch die Option --skip-lock-tables verwenden müssen

Um eine Liste der Optionen anzuzeigen, die Ihre Version von mariadb-dump unterstützt, führen Sie mariadb-dump --help aus

Zeile für Zeile vs.&nbspPufferung

mariadb-dump kann Tabelleninhalte zeilenweise abrufen und ausgeben oder den gesamten Inhalt einer Tabelle abrufen und vor der Ausgabe im Speicher puffern

  • Das Puffern im Speicher kann ein Problem darstellen, wenn Sie große Tabellen ausgeben
  • Um Tabellen zeilenweise auszugeben, verwenden Sie die Option --quick (oder --opt, die --quick aktiviert)
  • Die Option --opt (und damit --quick) ist standardmäßig aktiviert
  • Um die Speicherpufferung zu aktivieren, verwenden Sie daher --skip-quick

mariadb-dump und die mysql.transaction_registry_table

mariadb-dump enthält Logik für die mysql.transaction_registry-Tabelle

  • mysqldump aus einer früheren MariaDB-Version kann nicht für MariaDB 10.3 und höher verwendet werden

mariadb-dump und alte Versionen von MySQL

Wenn Sie eine aktuelle Version von mariadb-dump verwenden, um einen Dump zu erstellen, der in einen sehr alten MySQL-Server geladen werden soll, sollten Sie die Option --opt oder --extended-insert nicht verwenden

  • Verwenden Sie stattdessen --skip-opt