Hans: MySQL spielt verrückt. myisamchk hilft nur temporär

Hallo liebe Leute,

ich wende mich mit einem akuten Problem an Euch, dass mir die letzten Nerven raubt, sitzt mir doch der Kunde schwer im Nacken.

Die MySQL-Datenbank eines Kunden gerät immer wieder durcheinander. Symptomoe sind folgende:

1. Datensätze sind scheinbar verschwunden
2. Datensätze sind zwar da, werden aber mit kaputten Umlauten ("?" statt äöüß usw.) ausgegeben

Ich habe mich mehrere Tage lang intensiv mit der MySQL-Dokumentation zu myisamchk auseinander gesetzt, es hilft leider nichts. Ich mache beispielsweise folgendes:

debian:/var/mysql/smallcms# /opt/lampp/bin/myisamchk -m *.MYI > log.txt
myisamchk: warning: 1 client is using or hasn't closed the table properly
MyISAM-table 'Page.MYI' is usable but should be fixed
myisamchk: warning: 1 client is using or hasn't closed the table properly
MyISAM-table 'SessionData.MYI' is usable but should be fixed
myisamchk: warning: 1 client is using or hasn't closed the table properly
MyISAM-table 'User.MYI' is usable but should be fixed

Ok, kein Problem, myisamchk ist ja dafür ausgelegt. Also, um ganz sicher zu gehen:

1. Ich öffne die MySQL-Konsole, wechsele zur entsprechenden Datenbank, geben "FLUSH TABLES;" ein
2. ich fahre MySQL ganz herunter (mittels xampp: /opt/lampp/lamp stop)
3. ich führe "/opt/lampp/bin/myisamchk -r *.MYI" aus, scheinbar erfolgreich, denn:
4. "/opt/lampp/bin/myisamchk -m *.MYI > log.txt" wirft nun keine Fehler mehr (auch in log.txt ist alles ok)

Problem gelöst? Denkste, Minuten später spielt alles wieder verrückt. Verrückt spielen heisst dabei, dass Inhalte verschwinden und wieder kommen (ich drücke reload/F5) Umlaute mal kaputt ("?") sind, mal korrekt ausgegeben werden.

Dann schaue ich wieder mit "/opt/lampp/bin/myisamchk -m *.MYI > log.txt" nach und erhalte wieder:
myisamchk: warning: 1 client is using or hasn't closed the table properly
MyISAM-table 'Page.MYI' is usable but should be fixed
myisamchk: warning: 1 client is using or hasn't closed the table properly
MyISAM-table 'SessionData.MYI' is usable but should be fixed
myisamchk: warning: 1 client is using or hasn't closed the table properly
MyISAM-table 'User.MYI' is usable but should be fixed

Und täglich grüsst das Murmeltier :-(

Das habe ich noch versucht:
1. Einen Dump der zuvor reparierten Datenbank,
2. neue Datenbank angelegt
3. Dump eingespielt
4. Applikation zur neuen Datenbank gewechselt
5 selbes Spiel :(

Und das verstehe ich nun gar nicht mehr: ich habe eine ganz frische Datenbank angelegt, wieso zerschiesst die sich innerhalb kürzester Zeit?

Weitere Hintergrundinfos:
1. auf dem Server laufen auch andere DB-gestützte Applikationen, wie am Schnürchen
2. die Datenbank über die ich schreibe wird nicht geupdatet, es finden ausschliesslich Leseoperationen statt
3. das System läuft mit XAMPP in der Version mit PHP 5.0.4 und MySQL 4.1.13, sind da evtl. Probleme bekannt?

Das geht jetzt schon seit Tagen so, der Kunde ist zurecht völlig verärgert und ich mit meinen Nerven am Ende.

Herzlichen Dank an alle, die das hier geduldig gelesen haben, ich bin über jeden Hinweis auf Fehlerquellen dankbar.
Der Hans

  1. yo,

    es könnte vielleicht an einer unterschiedlichen codierung der zeichensätze liegen ? die probleme mit den umlauten könnten ein hinweis darauf sein....

    Ilja

    1. Guten Morgen Ilja,

      es könnte vielleicht an einer unterschiedlichen codierung der zeichensätze liegen ? die probleme mit den umlauten könnten ein hinweis darauf sein....

      meinst Du etwa die MySQL-Kollationen?
      Danke und Grüsse,
      Hans

      1. echo $begrüßung;

        es könnte vielleicht an einer unterschiedlichen codierung der zeichensätze liegen ? die probleme mit den umlauten könnten ein hinweis darauf sein....

        meinst Du etwa die MySQL-Kollationen?

        Hmm, aus dieser Antwort schließe ich, dass du dich noch nicht näher mit den Zeichensatz- und Sortiereinstellungen von MySQL 4.1 beschäftigt hast. Das ist meiner Meinung nach der Punkt, den man besonders beachten und verstanden haben muss, wenn man 4.1 verwendet. Es gibt dazu auch ein eigenes Handbuchkapitel: Character Set Support. (Empfehlung: mindestens 10.1 bis 10.3 lesen)
        Ebenso wichtig ist es, das Zusammenspiel von Datenbank, Abfrage-(PHP) und Darstellungsmechanismus (HTTP/HTML) verstanden zu haben.
        Stichwörter hierzu:

        • HTTP-Header-Angabe zum charset
        • HTML-META-Angabe zum charset (wir bei vorhandener HTTP-Header-Angabe ignoriert)
        • Zeichenkodierung des Dokuments (muss natürlich mit den Header-Angaben übereinstimmen)
        • Umwandlung von Daten von einer in eine andere Kodierung (möglicherweise verlustbehaftet)
        • Angabe der verwendeten/gewünschten Kodierung beim Datenbankzugriff (beispielsweise: SET NAMES ...)
        • https://forum.selfhtml.org/?t=115801&m=740309

        Die "Verfälschungen" sollten nicht auftreten, wenn du mit phpMyAdmin arbeitest (wobei beim Import von Dateien die richtige Auswahl der Zeichensatzangabe zu beachten ist). Wenn sie allerdings schon in der DB drin sind, kann phpMyAdmin auch nicht mehr zaubern.

        Ich könnte mir auch gut vorstellen, dass du keinerlei Angaben zur Zeichenkodierung gemacht hast und nun der Browser auf Gutdünken irgendwas auswählt, vielleicht noch gepaart mit unterschiedlichen Kodierungen der restlichen Seite und der aus der Datenbank stammenden Daten.

        Dass wirklich die Datenbank verrückt spielt glaube ich eher weniger.

        echo "$verabschiedung $name";