Ist Percona xtrabackup die richtige Wahl für mein 500 GB MySQL-Backup?

7

Ich habe eine MySQL-Datenbank mit 500 GB, die hauptsächlich aus Innodb-Tabellen besteht, und eine große (200 GB) MyISAM-Tabelle. Meine aktuelle Sicherungsstrategie besteht darin, die Datenbankdateien auf eine externe Festplatte zu kopieren. Dies führt zu einer Ausfallzeit von ~ 4 Stunden. Meine Bedürfnisse:

  1. Kostengünstig.
  2. Die Wiederherstellungszeit kann lang sein. Keine Echtzeitreplikation erforderlich.
  3. Kann Datenverlust in Bereichen von 1 Woche bis 2 Wochen behandeln.
  4. Ich würde eine möglichst kurze Ausfallzeit für das Backup bevorzugen, kann aber mit bis zu 2 Stunden leben.

Derzeit wird überlegt, zu Percona xtrabackup zu wechseln. Ist es die richtige Lösung für meinen Anwendungsfall? Ich bin besonders besorgt, dass es die MyISAM-Tabelle und die Lernkurve sperrt.

Noam
quelle

Antworten:

8

Aus diesem Grund könnten Sie eine andere DB-Infrastruktur verwenden.

Aufgrund Ihrer oben genannten Bedürfnisse habe ich einen Vorschlag, der jedoch einen kleinen Kompromiss erfordern würde.

VORSCHLAG # 1 : Verwenden Sie MySQL Replication auf Server, aber auf einer anderen Festplatte

Ihr zweites Bedürfnis ( No need of real-time replication) müsste in diesem Vorschlag einen kleinen Rückschritt machen. Da Sie eine externe Festplatte haben, die groß genug für XtraBackup ist, können Sie sie als Datenverzeichnis für eine zweite Instanz von MySQL auf derselben Box verwenden.

Ich habe meinen eigenen Dienst per Skript erstellt, um eine dedizierte MySQL-Instanz für die Ports 3307 - 3399 bereitzustellen. Hier sind meine früheren Beiträge dazu:

VORSCHLAG # 2 : Verwenden Sie MySQL Replication auf dem anderen Server

Low CostWenn Sie unter Berücksichtigung Ihres ersten Bedarfs ( ) Zugriff auf einen Commodity-Server mit ausreichend Speicherplatz haben, richten Sie MySQL Replication auf diesem externen Server ein. Auf diese Weise können Sie Backups auf dem Slave wie folgt ausführen

  • STOP SLAVE;
  • XtraBackup
  • START SLAVE;

Sie können dies ohne Auswirkungen (keine Serverlast, keine Festplatten-E / A) auf den Master tun

VORSCHLAG 3 : Parallele mysqldumps

Sie können parallele mysqldumps von Datenbanken oder Tabellen einrichten. Dies kann zu einem kürzeren Zeitfenster für Sicherungen führen. XtraBackup führt im Wesentlichen eine Transaktionssicherung mit Prüfpunkt und zeitkritischen Vorgängen durch, sodass der Zeitpunkt der Sicherung nach Abschluss der Sicherung liegt. Mit parallelen mysqldumps auf einem Slave, der nicht repliziert, erhalten Sie Backups, deren Zeitpunkt der Beginn des Backups ist. Mysqldump auf einem gestoppten Slave auszuführen, wäre unabhängig von der Speicher-Engine. Mit anderen Worten, es spielt keine Rolle, ob Tabellen InnoDB oder MyISAM sind.

Wenn Sie dies auf VORSCHLAG 1 anwenden, entstehen Serverlast und Festplatten-E / A, da sich sowohl Master als auch Slave auf demselben Computer befinden.

Wenn Sie dies auf VORSCHLAG 2 anwenden, gibt es keine Strafe für den Meister. Sie können Backups nach Belieben auf dem Slave ausführen. Sie müssen sich auch nicht mit dem Sperren von MyISAM-Tabellen befassen.

Bitte lesen Sie meine früheren Beiträge zum parallelen Ausführen von mysqldumps

RolandoMySQLDBA
quelle
+1 für all dies, aber meine persönliche Präferenz ist es, wenn möglich Backups von einem Slave zu nehmen. Und noch mehr von einem Slave auf einem anderen Server (um Schmerzen bei Hardwarefehlern zu begrenzen).
Derek Downey
@ Test Ich stimme zu. Ich bevorzuge immer Slave auf einem anderen Server. Einige verwenden einen Slave auf demselben Server, aber einem anderen Port und Datadir DiskVolume als Kostensenkungsmaßnahme. Einige Kunden meines Arbeitgebers leben damit. Ich lebe mit den Konsequenzen. Seufz .....
RolandoMySQLDBA
Ich war nicht immer so weise wie jetzt *! Haftungsausschluss : immer noch nicht weise.
Derek Downey
Wenn ich Vorschlag Nr. 1 mache, wie schwer wird das auf meinem Master-Server sein? In der Vergangenheit habe ich Vorschlag 2 ausprobiert, aber der Commodity-Server (Cloud-basiert) hatte eine sehr schlechte E / A und verwaltete die Arbeitslast nicht.
Noam
Vorschlag Nr. 1 fügt einige Serverlast und Festplatten-E / A hinzu, da Sie zwei MySQL-Instanzen auf derselben Box ausführen. Die Verwendung von Datadir für die 3306-Instanz auf einer Festplatte und einer anderen Festplatte für das Datadir der 3307-Instanz verringert die Festplatten-E / A, aber die beiden Instanzen konkurrieren um denselben Speicher. Vielleicht sollten Sie (für Vorschlag Nr. 2) einen Slave verwenden, dessen Hardware mit dem Master identisch ist. Wenn Sie den Commodity-Server für Vorschlag 2 verwenden müssen, beschränken Sie alle Lese- und Schreibvorgänge für Ihre App auf den Master. Verwenden Sie den Slave ausschließlich zur Sicherung. Gerade STOP SLAVE;wenn Seconds_Behind_Master 0 ist.
RolandoMySQLDBA