MySQL Cluster ndb_restore schlägt ohne Fehler fehl

388
egmackenzie

Ich habe an der Migration unserer aktuellen Einzelinstanzdatenbank in eine neue Clusterdatenbank mit MySQL-Cluster gearbeitet.

Es ist eine große Datenbank (mehrere Milliarden Datensätze), und obwohl es anscheinend gut funktioniert, habe ich Schwierigkeiten, ein Backup wiederherzustellen (für ein zweites Replikat der Standortentwicklung).

Das Backup enthält nur etwa 800 Millionen Berichte, mit denen die Hardware gut umgehen kann. Wenn ich jedoch versuche, die Sicherung wiederherzustellen (was Stunden bis Tage dauern kann!), Werden einige Wiederherstellungen des Knotens einfach angehalten - ohne ersichtlichen Grund und ohne etwas offensichtliches in den Protokollen.

Ich habe Google so gut wie möglich gesucht und kann niemanden finden, der dieses Problem festgestellt hat.

Die betreffende Datenbank enthält etwa 30 Tabellen, von denen eine die meisten Berichte enthält. Ich kann alle Metadaten der Tabellen gut wiederherstellen, und alle außer der großen Tabelle (mit dem Exclude-Table-Flag). Wenn ich jedoch versuche, die große Tabelle wiederherzustellen, bekomme ich das Problem, dass ndb_restore gerade aufhört.

Ich verwende MySQL-Cluster 5.6.23 mit ndb-7.4.5. Das Cluster besteht aus 6 Datenknoten (ausgeführtes ndbmtd), 1 Verwaltungsknoten und 3 API-Knoten (jeweils mit 3 Verbindungen, also logisch 9 API-Knoten auf 3 Servern).

Alle beteiligten Tabellen sind Plattendatentabellen, der Tabellenbereich ist groß genug, um den gesamten Datensatz zu enthalten, und das System verfügt über ausreichend RAM, um die Indizes und indizierten Spalten aufzunehmen.

Jede Hilfe wäre sehr dankbar (wenn Sie weitere Informationen benötigen, fragen Sie bitte!)

0

1 Antwort auf die Frage

0
egmackenzie

Ich glaube, ich habe die Lösung gefunden.

Ich habe den ndb_restore über ein Skript ausgeführt, das ich über eine SSH-Verbindung ausgeführt habe, da ich derzeit keinen physischen Zugriff auf die Server habe. Wenn die SSH-Sitzung stirbt, erhielt ndb_restore ein SIGHUP. Ich glaube, dass dies dazu geführt hat, dass der Prozess ohne Benachrichtigung oder Protokollnachrichten angehalten wurde.

Ich habe seitdem herausgefunden, dass ich dies verhindern kann, indem das Skript einmal im Hintergrund erstellt wurde (Strg + Z; Bg).

disown [job id] 

Details hierzu finden Sie unter: