Konsistente logische Sicherung von Datenbanken, die MyISAM- und InnoDB-Engines verwenden

8

Ich habe eine Frage zur logischen Sicherung von MySQL-Datenbanken, die sowohl MyISAM als auch InnoDB verwenden.

Das mysqldumpDienstprogramm unterstützt diese beiden Optionen:

  • --single-transaction - Erstellt einen konsistenten Snapshot, indem alle Tabellen in einer einzigen Transaktion ausgegeben werden. Funktioniert NUR für Tabellen, die in Speicher-Engines gespeichert sind, die Multiversioning unterstützen (derzeit nur InnoDB). [...] Die Option deaktiviert automatisch --lock-Tabellen.

  • -x, --lock-all-tables - Sperrt alle Tabellen in allen Datenbanken. Dies wird erreicht, indem eine globale Lesesperre für die Dauer des gesamten Speicherauszugs verwendet wird. Deaktiviert automatisch --single-transaction und --lock-tables.

    • Für InnoDB brauchen wir --single-transaction

    • Für MyISAM benötigen wir - Lock-Tables oder Lock-All-Tables (falls wir datenbankübergreifende Konsistenz benötigen).

Wie soll eine Hybriddatenbank (eine Datenbank, die sowohl MyISAM- als auch InnoDB-Engines verwendet) gesichert werden?

Bearbeiten:

Zur Klarstellung könnte die Frage folgendermaßen umformuliert werden:

Garantieren die Optionen lock- [all-] tables eine konsistente Sicherung von InnoDB-Tabellen?

Dimitre Radoulov
quelle

Antworten:

8

Mit mysqldump können Sie nur sicher verwenden, --single-transactionwenn alle Ihre Tabellen InnoDB sind, andernfalls ist Ihre Sicherung inkonsistent.

Wenn Sie eine Hybridsicherung benötigen, benötigen Sie die lock-tablesfür alle Tabellen in der Sicherung (Standard), die für alle Engines sicher ist. Erwähnenswert ist auch, dass die Standardoptionen sicherstellen, dass Ihr Backup sicher ist. Sie müssen kein spezielles Flag aktivieren.

Hinweis: Wenn Sie einen Hybrid-Mix haben, schauen Sie sich vielleicht xtrabackup an. Es wird nur während der MyISAM-Phase der Sicherung gesperrt.

Morgan Tocker
quelle
Ich wollte das gerade posten, aber du hast mich geschlagen. Relevanter Link: percona.com/doc/percona-xtrabackup/innobackupex/…
Derek Downey
Vielen Dank für die Bestätigung, dass Sperrtabellen eine konsistente Sicherung für beide Engines garantieren. Ich suche derzeit nach Zmanda Recovery Manager für MySQL (ich werde mir auch xtrabackup ansehen).
Dimitre Radoulov
Zmanda ist nur ein GUI-Manager für alle anderen Sicherungsmethoden - ich bin mir ziemlich sicher, dass die Verwendung von xtrabackup unterstützt wird.
Morgan Tocker
Hallo @ Morgan Tocker, Zmanda bietet auch eine Reihe von Skripten (zrm- *), die tatsächlich verschiedene Sicherungstypen ausführen: logisch, roh und Snapshots. Alle von uns verwalteten Datenbanken sind hybride Datenbanken. Daher ist die Verwendung eines separaten Produkts wenig sinnvoll. Wir können die Sperre während der Sicherung nicht vermeiden.
Dimitre Radoulov
Diese Antwort besagt, dass wenn man mysqldump verwendet und angibt, --lock-all-tablesdas Backup konsistent ist, oder? Und man muss mysqldump nur einmal ausführen : Es ist sowohl für InnoDB als auch für MyISAM gleichzeitig sicher, oder?
KajMagnus
2

Als zusätzliche Idee für Ihre Situation ist es möglicherweise hilfreich, sich Gedanken über das Einrichten eines Master-Slave-Setups zu machen, bei dem Ihr Backup vom Slave erstellt wird.

Eine MySQL-Datenbank mit einer Mischung aus InnoDB und MyISAM sperrt (soweit ich weiß, in jeder Konfiguration und mit jedem Backup-Tool) immer die MyISAM-Tabellen für die MyISAM-Backup-Phase.

Verwenden Sie dieses Setup, um diese Sperrung zu vermeiden:

  • Server A: MySQL-Master
  • Server B: MySQL-Slave (verbunden mit Server A)

Alle Schreib- und Lesevorgänge gehen an Server A (Master). Server B (Slave) wird nur zur Sicherung verwendet. Auf dem Slave installieren Sie ein Backup-Tool oder ein Skript Ihrer Wahl, z. B. MySQL Administrator.

Konfigurieren Sie Ihr Backup, z. B. täglich während der Nacht. Die Sperren befinden sich auf dem Slave, was zu einer Verzögerung führt, während der Slave sperrt. Diese Verzögerung wird jedoch aufgeholt, sobald die Sicherung beendet und die Sperre geöffnet ist.

Raffael Meier
quelle