Ich habe eine Reihe von Websites gefunden, die genau darüber sprechen, aber mir fehlen einige wichtige Details. Die allgemeinen Schritte sind
- Lauf
FLUSH TABLES WITH READ LOCK
- Machen Sie den ZFS-Schnappschuss
- Lauf
UNLOCK TABLES
Verschiedene Quellen berichten, dass InnoDB, das ich verwende, a nicht wirklich ehrt FLUSH
. Das MySQL-Benutzerhandbuch stellt fest, dass es eine FLUSH TABLES...FOR EXPORT
Variante für InnoDB gibt, für die jedoch jede Tabelle einzeln angegeben werden muss, anstatt die gesamte Datenbank zu sichern. Ich würde es vorziehen, nicht jede Tabelle einzeln anzugeben, da die Wahrscheinlichkeit groß ist, dass die Liste der Tabellen nicht mehr mit den tatsächlich vorhandenen Tabellen übereinstimmt.
Das andere Problem, das ich habe, ist, dass ich so etwas vorhabe mysql -h"$HOST" -u"$USERNAME" -p"$PASSWORD" --execute="FLUSH TABLES WITH READ LOCK"
. Dadurch wird die Sperre jedoch sofort nach dem Beenden der Sitzung aufgehoben. Das macht Sinn, ist aber auch ziemlich ärgerlich, da ich die Lesesperre halten muss, wenn ich meinen Schnappschuss mache.
Meine andere Idee ist es, ein heißes Backup mit einem Tool wie Percona XtraBackup zu erstellen und Snapshots des Backups zu erstellen. Ich würde es jedoch vorziehen, nicht die Kosten für das Schreiben aller meiner Daten an einen zweiten Speicherort zu zahlen, nur um einen Snapshot zu erstellen.