Datenverlust in Tabelle

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Datenverlust in Tabelle

    Hallo,

    ich mußte vor kurzen feststellen, das in einer Tabelle auf unerklärlicher
    Weise vereinzelnt Datensätze (Zeilen) verschwinden.
    Ein CHECK TABLE ergab keinen Fehler.

    Die Tabelle umfaßt ca. 6000 Datensätze,
    wird tgl. ca 180000 besucht, dabei jedoch immer nur
    ein Datensatz per (1*SELECT & 1*UPDATE) behandelt.

    Das ganze liegt auf einem P4 (3.060 Mhz) mit 2GB RAM.

    Die beiden Query's erfolgen per PHP.

    Jemand einen Tip was das sein kann?
    Meine Vermutung: das exakt zeitgleich mehrere UPDATE auf ein und denselben Datensatz kommen.
    Ein Primärschlüssel wurde nicht vergeben.


    Thanxx

  • #2
    bei updates sollten aber datensätze nicht verschwinden sondern sich nur überschreiben.
    wie wäre es mit lock table zu arbeiten?
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      Wenn die Tabelle ein LOCK bekommt, kann in dieser Zeit kein anderer
      auf einen anderen Datensatz in die Tabelle lesen bzw. schreiben.
      In der 'RushHour' bekommt die Tabelle bis zu 10 Query's in der Sekunde.
      Wäre schlecht, da 'nen Riegel vor zu schieben

      Hab vorsorglich einen Primärschlüssel definiert.
      Kann mir aber nicht vorstellen, das es daran liegt.

      Kommentar


      • #4
        joa stimmt...
        aber warum sollte ein upsate einen datensatz löschen?
        Beantworte nie Threads mit mehr als 15 followups...
        Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

        Kommentar


        • #5
          jenau dat frach ick mich auch ...

          Kann nur sagen das es zur Spitzenzeit des Server passiert ist.
          Hoffe das jemand schon ähnliches erlebt hat und mir berichten könnte
          was der Grund war ...

          Kommentar


          • #6
            die Query zeigen, in PHP-Code und in geparsten Zustand (per echo)

            Kommentar


            • #7
              PHP-Code:
              $member=mysql_fetch_array(mysql_query
              ("SELECT * FROM $db[member] WHERE benutzer='$_GET[id]'"));
              .
              .
              .
              mysql_query("UPDATE $db[member] 
              SET referer='
              $member[referer]',gesamt='$member[gesamt]',
              lastaction='
              $sys[time]' WHERE benutzer='$member[benutzer]'"); 
              echo's sind auf der schnelle nicht möglich. Würde hier auch nichts bringen,
              da der Fehler selten aber gravierend ist.
              Ist MySQL mit genannten Angaben schon an der Grenze?

              Thannx
              EDIT:
              line break sponsored by asp2php. Du bist lange genug dabei. Bitte demnächst drauf achten. Danke.
              Zuletzt geändert von asp2php; 30.01.2005, 21:57.

              Kommentar


              • #8
                kennst du den Unterschied zwischen:
                PHP-Code:
                $db[member]

                // und

                $db['member'
                mach bitte folgendes:
                PHP-Code:

                mysql_query
                ("UPDATE ".$db['member']." ... "); 
                außerdem hast du die Daten im Array $member schon wegen SQL-Injektion untersucht? wo kommen sie denn her?

                à propos SQL-Injektion, denk mal über diese Abfrage mal nach:
                PHP-Code:
                $member=mysql_fetch_array(mysql_query
                ("SELECT * FROM $db[member] WHERE benutzer='$_GET[id]'")); 

                Kommentar


                • #9
                  SQL-Injektion habe ich bis jetzt nicht in Betracht gezogen.
                  Der Script-Code ist schon etwas älter.
                  Werde es überarbeiten müssen

                  Würde dies den beschrieben Fehler erklären?
                  Oder kämen da noch andere Sachen in betracht?


                  Kommentar


                  • #10
                    Original geschrieben von ->X³<-
                    SQL-Injektion habe ich bis jetzt nicht in Betracht gezogen.
                    Der Script-Code ist schon etwas älter.
                    Werde es überarbeiten müssen

                    Würde dies den beschrieben Fehler erklären?
                    Oder kämen da noch andere Sachen in betracht?


                    Unter Umständen - ja.
                    Das sich zwei zeitgleiche Updates des selben Datensatzes jedoch "überschreiben" oder gar löschen kann man 100% ausschließen. Intern im Mysql-Server werden diese Abfragen keineswegs parallel ausgeführt.

                    Ansonsten würde ich mal checken, ob nicht ein technischer Schaden an der HDD vorliegt, sodass Mysql bestimmte Datensätze einfach nicht mehr auf der Festplatte lesen kann.

                    Ansonsten wäre es recht interessant zu erfahren, wie stark das Script / Projekt im allgemein besucht wird (1 user pro Tag oder 50 pro Minute ??). Kommen die Datenverluste in regelmäßigen Abständen vor? Wieviele Datensätze sind bisher verschwunden? Hat sich jemand zugriff zum Server verschafft? Serverlogs auf verdächtige Einträge durchsuchen. Wenn es sich um eine "größere Software" ala PHPBB oder andere MultiAdmin Systeme handelt, ist es da nicht auch möglich das ein anderer Admin die entsprechenden Datensätze manuell gelöscht hat?

                    Kommentar


                    • #11
                      Wie bereits beschrieben, bestehen in der Spitzenzeit bis zu 10 Query's pro Sekunde. Das mit dem zeitgleichen Zugriff bleibt eigentlich auch auszuschließen, da MySQL sehr stabil ist. Ganz zu schweigen davon, das so ein Fehler sicherlich öfter vorkommen würde, wenn man überlegt wie verbreitet MySQL ist

                      Die Datenverluste sind sporadisch, eher selten, aber gravierend.
                      Entsprechende 'Mechanismen' wegen SQL-Injektion werden nachgeholt.

                      Die Serverkonfig würde als nächstes in Betracht kommen. Ein HDD-Defekt eher weniger, da kürzlich ein Umzug stattfand, und auch auf dem alten System Daten verloren gingen. (Nicht wegen dem Umzug)

                      MultiAdmin, nein

                      Bis hierhin schon mal vielen vielen Dank für die Hilfe.
                      Was nicht heißt das der Beitrag hier enden muß ... ....


                      Kommentar

                      Lädt...
                      X