Mariadb-dump/Anwendung
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. 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
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