datenrettung memory tabelle bei absturz

MySQL, PostgreSQL, SQLite
stanglwirt
Posts: 48
Joined: 2006-01-10 14:44

datenrettung memory tabelle bei absturz

Post by stanglwirt » 2006-11-17 08:54

Hi,
gibt es eine möglichkeit, nach einem absturz von mysql noch an die daten einer memory-tabelle zu gelangen?
kann man irgendwie verhindern, dass die speicherbereiche gelöscht werden um danach darauf zuzugreifen?

mfg

rvullriede
Posts: 1
Joined: 2006-03-02 10:34

Re: datenrettung memory tabelle bei absturz

Post by rvullriede » 2006-11-17 10:02

Hallo,

wie der Name schon sagt: Memory-Tabellen liegen im Memory. Nach Neustart sind die weg. Deshalb sollte man diese Tabellen nur für nicht persistente Daten wie Session-Informationen o.ä. benutzen.

Eine Lösung wäre ein Replikationsslave, auf dem die Tabelle einen anderen Typ (MyISAM, InnoDB) hat. Über diesen könntest du im Falle eines Crashes (oder Neustarts) die Daten wiederherstellen.

Gruß
Raphael

stanglwirt
Posts: 48
Joined: 2006-01-10 14:44

Re: datenrettung memory tabelle bei absturz

Post by stanglwirt » 2006-11-17 13:25

es handelt sich dabei um sehr viele temp-daten die aus performance-gründen zuerst in ner mem-tabelle gespeichert und verarbeitet werden. alle paar minuten werden diese dann in verschiedene logs weggespeichert. dadurch habe ich schnellen zugriff auf die daten, und es muss nicht zweimal auf festplatte gespeichert werden.

wäre halt ärgerlich wenn diese durch einen absturz verloren gehen. bei einem ordentlich beenden des server ist es ja kein problem die daten vorher noch zu speichern...

gibts denn keine möglichkeit, dass wenn der server crasht, auf den speicherbereich zuzugreifen? wird dieser denn automatisch sofort bei einem crash durch den kernel wieder freigegeben?

der slave auf ner anderen maschine wäre eine lösung aber momentan noch nicht umsetzbar, weil nur 1-server-lösung. aber für die zukunft interessant.

danke.

lucki2
Posts: 427
Joined: 2006-10-03 01:31

Re: datenrettung memory tabelle bei absturz

Post by lucki2 » 2006-11-17 17:14

Matze hat von seiten Systemprogrammierung 100% recht.
Von der DBMS-Seite:
stanglwirt Du hast sicher mal was von ACID gehört. Normal durch DB realisiert - Auch MySQL.

Daß die Tabellen weg sind ist kein Problem. Gegenteil, das ist gut. Halbe Transaktionen sind inkonsitent, denn Du weißt nicht, wann ein Crash passiert. Tabellen weg ist einfach ein Rollback: perfekt.

Dein wirkliches Problem ist: Du kannst wahrscheinlich die Transaktion nicht wiederholen. Wo ist bei Dir die Möglichkeit, die Transaktion zu wiederholen(und zwar konsistent)? Wenn nicht, ist das Dein konzeptionaler Fehler, der Dir Probleme macht.

lucki2
Posts: 427
Joined: 2006-10-03 01:31

Re: datenrettung memory tabelle bei absturz

Post by lucki2 » 2006-11-18 03:52

Also, bitte Du willst doch nicht korrupte, völlig inkonsistente temporäre Tabellen weiter verwenden?

"Ganz oder Gar nicht" ist die Device. Kein Datum in den Tabellen ist Ganz verabeitet(in einem definierten Zustand). Also: alle "Gar nicht". Auf keinen Fall korrupte Daten retten. Vorgänge statt dessen wiederholen. Das ist das Entscheidende.

Klar kann das komplexer werden. Aber: Constraints, die flüchtige Daten vorraussetzen - sorry:->DB normalisieren + Abhängigkeitsrichtungen überprüfen!

Weil Du Applikationsebene sagst: Die ganze Transaktion findet bei Kollega sowieso auf Applikationsebene statt, er speichert das Datum endlich im Filesystem ... von daher: mei.

User avatar
isotopp
Posts: 471
Joined: 2003-08-21 10:21
Location: Berlin

Re: datenrettung memory tabelle bei absturz

Post by isotopp » 2006-11-18 09:30

stanglwirt wrote:gibt es eine möglichkeit, nach einem absturz von mysql noch an die daten einer memory-tabelle zu gelangen?
Nein.

Wenn der Kernel eines Anwendung beendet, schließt der Kernel alle Filehandles und gibt alle Speicherbereiche frei. Darauf hat die Anwendung schon keinen Einfluß mehr.

User avatar
isotopp
Posts: 471
Joined: 2003-08-21 10:21
Location: Berlin

Re: datenrettung memory tabelle bei absturz

Post by isotopp » 2006-11-18 09:32

lucki2 wrote:Von der DBMS-Seite:
stanglwirt Du hast sicher mal was von ACID gehört. Normal durch DB realisiert - Auch MySQL.
Wir reden hier von Tabellen mit ENGINE=Memory. Diese sind nicht transaktional. Sie sind nicht mal D (durable).

User avatar
isotopp
Posts: 471
Joined: 2003-08-21 10:21
Location: Berlin

Re: datenrettung memory tabelle bei absturz

Post by isotopp » 2006-11-18 09:33

matzewe01 wrote:Entschudligung, seit wann kann Mysql Transaktionen handeln?
Seit MySQL 4.0. Du musst dazu Deine Tabellen mit ENGINE=InnoDB erzeugen.

lucki2
Posts: 427
Joined: 2006-10-03 01:31

Re: datenrettung memory tabelle bei absturz

Post by lucki2 » 2006-11-18 12:55

isotopp wrote:
lucki2 wrote:Von der DBMS-Seite:
stanglwirt Du hast sicher mal was von ACID gehört. Normal durch DB realisiert - Auch MySQL.
Wir reden hier von Tabellen mit ENGINE=Memory. Diese sind nicht transaktional. Sie sind nicht mal D (durable).
War doch genau meine Rede, wenn Du weiterließt! Deswegen muß er dafür selber sorgen und weil die Transaktion außerhalb der DB stattfindet(in das Filesystem schreiben).

Außerdem: was ist eine Transaktion? Ist eine Transaktion, wenn sie von der DB nicht gemanaged wird, keine Transaktion mehr?

Transaktion ist ein Zustandswechsel. Nicht unbedingt in der Datenbank, sondern der Weg von definiertem Urzustand bis definiertem Zielzustand in einem System.

Definierter Zielzustand in diesem Falle(schon Durable):Daten im Log. Alles dazwischen ist Transaktion(Zustand undefiniert und flüchtig).

Ähm ... und bei MySQL-Transaktionen wird sich grundsätzlich an von mir genannte Prinzipien halten. Filesysteme(ex3,xfs,reiserfs..) halten sich an solche Prinzipien(ext2 nicht - das war der Grund ext3 zu entwickeln: Konsistenz, keine halben Transaktionen!).

stanglwirt
Posts: 48
Joined: 2006-01-10 14:44

Re: datenrettung memory tabelle bei absturz

Post by stanglwirt » 2006-11-20 09:30

tja schade, dass das nicht geht, dachte mir aber schon sowas.

mein konzept mit der temporären tabelle ist mehr ein kompromiss, weil ich mir momentan nicht die nötige hardware leisten will, die erforderlich ist, um das ganze sicher zu machen. die transaktionen sind *nicht* wiederholbar, da sie nicht von mir kommen. da die erstellten log-files zwar schön sind, aber nicht sooooo zwingend erforderlich sind, leiste ich mir einfach den datenverlust bei einem crash.

ein weiterer lösungsansatz wäre vielleicht das binlog zu benutzen.

r. u. serious
Posts: 88
Joined: 2006-06-10 14:17

Re: datenrettung memory tabelle bei absturz

Post by r. u. serious » 2006-11-22 08:39

Wenn das Problem nur der Absturz von mysql ist, das system selbst aber munter weiter läuft, könnte man natürlich das Datadir von mysql auf ein tempfs legen (oder zumindest einen zweiten mysqld entsprechend konfigurieren). Die Dateien wären auch nach einem Absturz von mysql noch verfügbar (vorausgesetzt das OS macht nicht die Biege). Sowas habe ich aber selbst noch nie gemacht, vielleicht übersehe ich ja gerade andere Probleme die man sich damit ins Haus holen könnte...

stanglwirt
Posts: 48
Joined: 2006-01-10 14:44

Re: datenrettung memory tabelle bei absturz

Post by stanglwirt » 2006-11-22 13:47

du meinst, ne normale tabelle (z.b. innodb) hernehmen aber als speicherort ne ramdisk nehmen?
ja, das wäre vielleicht auch ne möglichkeit. müsste man direkt mal testen.