Ist MyIsam sicherer als InnoDB?

461
Tobia

Ist die MyIsam- Engine in Bezug auf den Datenverlust aufgrund eines FileSystem-Fehlers sicherer als InnoDB ?

InnoDB scheint mit MySQL-Tool nicht reparierbar zu sein.

Ich musste meine Engine auswählen und habe InnoDB aufgrund von Fremdschlüsseln gewählt, aber ich werde die Engine-Migration in Betracht ziehen, wenn dies sicherer erscheint.

0
InnoDB ist mit diesem Tool nicht "reparierbar", da im Reparaturfall dieser Reparaturvorgang nicht erforderlich ist. Stattdessen werden Protokolle wiedergegeben. Der Hochstapler vor 10 Jahren 3
... was bedeutet, dass InnoDB und MyISAM in Bezug auf die Zuverlässigkeit in etwa mit einem Journal- und einem Nicht-Journal-Dateisystem vergleichbar sind. Aaron Miller vor 10 Jahren 1
Zeichnen Sie Sperren, atomare Commits und Rollbacks durch ein Transaktionsprotokollierungssystem auf, verglichen mit poof, Ihre Tabelle ist gerade beschädigt und Sie haben jetzt dieses praktische Werkzeug, um Ihre Daten wiederherzustellen. Proaktiv vs. reaktiv. Fiasco Labs vor 10 Jahren 0

3 Antworten auf die Frage

1
RolandoMySQLDBA

InnoDB verfügt im Hintergrund über eine sehr aufwändige Architektur

InnoDB-Architektur

InnoDB Architecture

Im Falle eines Absturzes verfügt InnoDB über den doppelten Schreibpuffer und die Protokolldateien, um Mechanismen für die Wiederherstellung nach Abstürzen zu unterstützen. MyISAM verfügt nicht über einen solchen Schutz. Ich habe dazu in DBA StackExchange Beiträge geschrieben:

MyISAM kann zu leicht abstürzen, da Daten niemals im Arbeitsspeicher zwischengespeichert werden. Alle Lese- und Schreibvorgänge erfordern rohe Zwangs-E / A aus der MyISAM-Tabellendatei .MYD. Dies bedeutet, dass offene Dateizugriffsnummern dem Betriebssystem ausgeliefert werden.

Wenn InnoDB reparierbar sein soll, müssen Sie my.cnf so konfigurieren, dass InnoDB weniger vom Betriebssystem und mehr von der internen Architektur abhängig ist. Siehe meinen letzten Beitrag Hohe durchschnittliche Last aufgrund der hohen Verwendung der MySQL-CPU . Auf diese Weise kann InnoDB Crash Recovery mehr zur Selbstheilung beitragen.

0
Alex Antonov

Ich würde InnoDB wegen Sperren pro Datensatz gegen MyIsam-Sperren pro Bohrungstabelle verwenden. InnoDB erfordert auch kein Reparaturwerkzeug, wie bereits erwähnt. Darüber hinaus kann die InnoDB-Engine Tabellen in separaten Dateien speichern, sodass sie vor dem Absturz des Dateisystems sicherer erscheint.

MyISAM kann Tabellen auch in separaten Dateien speichern. ChrisInEdmonton vor 10 Jahren 1
@ ChrisInEdmonton, ja du hast recht, es ist das Standardverhalten von myisam. Alex Antonov vor 10 Jahren 0
Schlagen Sie also ein innodb mit separaten Dateiprotokollen vor? Tobia vor 10 Jahren 0
Ich empfehle innodb mit "table per file" -Konfiguration (siehe [link] (http://dev.mysql.com/doc/refman/5.5/de/innodb-multiple-tablespaces.html)). Alex Antonov vor 10 Jahren 0
0
danblack

Dateisystemfehler oder sogar Fehler auf Blockebene sind nicht die Art von Elementen, die von der Implementierung von MyISAM oder Innodb ausführlich getestet oder berücksichtigt wurden. Während einige Erkennungen auftreten können, wenn sie geschrieben werden, gibt es eine große Annahme, dass das, was einmal ohne Fehler geschrieben wurde, korrekt ist. Prüfsummen sind vorhanden und werden beim Lesen geprüft, aber der Fehlerbehebungspfad auf Seiten / Zeilen, auf denen die Prüfsumme fehlschlägt, glaube ich nicht, wurde vollständig durchdacht.

Ich vermute, die richtige Risikominderungsstrategie (und einige andere Formen von Serverausfällen) besteht darin, einen Replikationsslave auf einem anderen Dateisystem auszuführen und als DR Binärprotokolle und einen logischen SQL-Snapshot-Dump zu führen. Auf diese Weise müssen Sie sich nicht auf Tools verlassen, die möglicherweise einige Ausfälle mit Datenverlust umgehen.