Dirk Jobsten: Verloren gehende Daten?

Liebe Fachleute, ich stehe vor einem Rätsel.

Und war verliere ich Datensätze, die auf meiner Webseite erscheinen sollen.

Zur Datenbank:
Die liegt auf einem Apache-Server meines Webhosters und ist eine mysql-Datenbank. In dieser Datenbank ist eine Tabelle mit knapp 12.000 Datensätzen.

Angesteuert für die Verwaltung der Datensätze wird die mysql-Datenbank, wie oftmals üblich, via php-scriptdateien.

Nun erlebe ich in willkürlichen Zyklen willkürlichen Datenverlust.

Betroffen sind in der Regel etwa 10-100 Datensätze. Das seltsame daran ist, ich verwende ich keinem meiner php-scripte eine drop- oder delete-Anweisung.
Datensätze, die nicht mehr sichtbar sein sollen, werden faktisch nicht gelöscht, sondern über die update-Anweisung mit einer Kennziffer in einer dafür vorgesehenen Spalte versehen.

Nun handelt es sich bei keinem der willkürlich verlorengegangenen Datensätze um eine Zeile, die nur über besagte Kennziffer unterdrückt wird- die könnte ich ja sonst noch in meiner Oberfläche oder via phpmyadmin finden- die Daten sind tatsächlich weg.

Da ich wie gesagt keine Löschung per sql-Anweisung vornehme, sehe ich zunächst davon ab, code-Beispiele zu posten- insbesondere, da diese ja ohnehin nur update-Anweisung enthalten.

Meine Frage ist, gibt es eine Erklärung für das verschwinden der Datensätze. Hat dies etwas mit der Struktur oder dem Typ der Datenbank zu tun? Ist dies ein häufig vorkommendes Problem, dass durch Reorganisation der Datenbank zu beheben ist?

  1. Liebe Fachleute, ich stehe vor einem Rätsel.

    Und war verliere ich Datensätze, die auf meiner Webseite erscheinen sollen.

    Verlierst Du sie, nachdem Du sie schonmal wieder gesehen hast oder bekamst Du die später vorlorenen Daten nie zu Gesicht?

    Torro

    1. Die Daten waren zuvor sichtbar und gingen erst dann willkürlich verloren.

      1. Die Daten waren zuvor sichtbar und gingen erst dann willkürlich verloren.

        Zeitrahmen?

        Ich hatte sowas auch schon mal.
        Daten müssen persistent gemacht werden innerhalb einer DB, um endgültig als eingetragen zu gelten.
        Bei mir war es so, dass die Daten beim Provider in den Arbeitsspeicher gelangten, von dort aus aber wegen nicht ordnungsgemäß heruntergefahrenem mysql niemals vom RAM auf die Platte kamen.
        Der Provider hatte den Serverprozess einfach so gekillt, als er einen Dienst neu starten wollte.
        Folge war ein willkürlicher Datenverlust.

        Ob das bei Dir auch so oder ähnlich ist, läßt sich nur erraten. Aber danach hast Du ja auch gar nicht gefragt. Du wolltest wissen, ob es theoretisch möglich ist und das habe ich Dir beantwortet.

        Gruß, Torro

        1. Die Daten waren zuvor sichtbar und gingen erst dann willkürlich verloren.

          Zeitrahmen?

          Ich hatte sowas auch schon mal.
          Daten müssen persistent gemacht werden innerhalb einer DB, um endgültig als eingetragen zu gelten.
          Bei mir war es so, dass die Daten beim Provider in den Arbeitsspeicher gelangten, von dort aus aber wegen nicht ordnungsgemäß heruntergefahrenem mysql niemals vom RAM auf die Platte kamen.
          Der Provider hatte den Serverprozess einfach so gekillt, als er einen Dienst neu starten wollte.
          Folge war ein willkürlicher Datenverlust.

          Ob das bei Dir auch so oder ähnlich ist, läßt sich nur erraten. Aber danach hast Du ja auch gar nicht gefragt. Du wolltest wissen, ob es theoretisch möglich ist und das habe ich Dir beantwortet.

          Gruß, Torro

          Das klingt gut, sowas in der Art hätte ich auch gesagt.
          Zudem möchte ich hier mal das Wort "Transaktion" ins Getümmel werfen. Eventuell führst du Transkationen aus, die im Cache hängen bleiben. Oder deine Datenbank läuft nicht richtig was Threads angeht. Dann kann es sein, dass du einmal im Web (also auf deiner Webseite) die Daten siehst, auf der MySQL Konsole aber nicht, da eventuell 2 verschiedene Threads laufen die nicht die identischen Daten beinhalten.

          So oder so würde ich dir empfehlen die Tabellen auf einen Localhost zu ziehen und deine Webseite dort zu rekonstruieren. Wenn immer noch Datenverluste auftreten wird es wohl doch an deinen Scripten liegen.

          Gruß
          Niemals verloren Gegangener
          T-Rex

  2. Hi!

    Meine Frage ist, gibt es eine Erklärung für das verschwinden der Datensätze.

    Ja, garantiert. Aber eine Erklärung der wirklichen Ursache bekommst du nicht, indem du andere Leute Glaskugel lesen lässt. Auch ein Blick in den Quellcode allein ist nicht immer zielführend. Ich denke, dass du eher Debugging betreiben musst. Wobei im Labor die Gefahr besteht, dass du das Problem nicht nachvollziehen kannst. Dann wirst du um ein Logging nicht drumrumkommen. Bei der Gelegenheit, Logausgaben in das bestehende Programm einzubauen, kannst du gleich kontrollieren, ob es ordentlich geschrieben ist, also vor allem, ob Fehler einkalkuliert sind und Fehlerzustände berücksichtigt werden.

    Lo!

    1. Ganz ehrlich? Ich weiß nicht, was du mit der polemischen Aussage vom Glaskugellesen bezwecken möchtest.

      Ich brauche schlicht eine Auskunft darüber, ob eine mysql-Datenbank ohne Einflußnahme über php-scripte Daten verlieren kann- z.B. durch sowetwas wie Fragmentierung.

      Groß meinen Quellcode zu gucken oder zu debuggen bringt mir da leider gar nichts, weil ich wie ich bereits darlegte, gar-keine-Löschbefehle im code implementiert habe.

      Es kann also kein Datenverlust durch meinen code entstehen- es sei denn dies wäre beim simplen Auslesen von Datensätzen einer mysql-Datenbank über die select-Anweisung oder dem aktualiseren durch update der Fall- was mir neu wäre.

      Daher mein Interesse an einer code-fremden Ursache und ein möglicherweise sogar bekanntes Problem/Phänomen, das mir eine plausible Erklärung für den Datenverlust bietet.

      1. Ganz ehrlich? Ich weiß nicht, was du mit der polemischen Aussage vom Glaskugellesen bezwecken möchtest.

        Ich brauche schlicht eine Auskunft darüber, ob eine mysql-Datenbank ohne Einflußnahme über php-scripte Daten verlieren kann- z.B. durch sowetwas wie Fragmentierung.

        Nein, ist nicht möglich wenn alles was du erzählt hast tatsächlich stimmt.

        Hilft dir das jetzt? Nicht? Deshalb die polemische Aussage übers Glaskugellesen, wir können dir so schlicht nicht helfen.

        Läuft der Webserver auf Produktion? Wer hat Zugang zu diesem Server? Gibts da möglicherweise Kleingeister die willkürlich versuchen Daten zu löschen? Hast du dich gegen solche Angriffe geschützt (MySQL-Injections)? Verwendest du phpMyAdmin und ist dieses "von aussen" zugänglich?

        Ich verstehe durchaus dass du keine Ahnung hast was das Problem verursachen könnte, auch dass du in einem Forum nach Hilfe suchst, aber wie sollen wir mit so wenigen Hintergrundinformationen irgendwas sehen auf das du selbst noch nicht gestossen bist?

        1. Ganz ehrlich? Ich weiß nicht, was du mit der polemischen Aussage vom Glaskugellesen bezwecken möchtest.

          Ich brauche schlicht eine Auskunft darüber, ob eine mysql-Datenbank ohne Einflußnahme über php-scripte Daten verlieren kann- z.B. durch sowetwas wie Fragmentierung.

          Nein, ist nicht möglich wenn alles was du erzählt hast tatsächlich stimmt.

          Diese Aussage ist schlichtweg falsch!

          Gruß, Torro

      2. Ganz ehrlich? Ich weiß nicht, was du mit der polemischen Aussage vom Glaskugellesen bezwecken möchtest.

        Ich schon. Weil ich ebenfalls, genau wie dedlfix ins Blaue hinein rate.

        Gruß, Torro

      3. Hi!

        Ganz ehrlich? Ich weiß nicht, was du mit der polemischen Aussage vom Glaskugellesen bezwecken möchtest.

        Ganze ehrlich ist immer gut. Man kann einfach nur spekulieren. Das hilft dir nicht weiter, weil alle Aussage relativ bleiben. In deinem speziellen Fall kann dann immer noch was ganz anderes die Ursache sein. Es sind also nur Ergebnisse von Glaskugellesen und ähnlichen Methoden, die du auf eine solche Frage bekommen kannst.

        Ich brauche schlicht eine Auskunft darüber, ob eine mysql-Datenbank ohne Einflußnahme über php-scripte Daten verlieren kann- z.B. durch sowetwas wie Fragmentierung.

        Können kann immer alles. MySQL selbst ist jedenfalls nicht dafür bekannt, Daten zu verlieren. Aber so ein Server-System ist recht komplex, da kann bis hin zu Hardwarefehlern alles möglich sein.

        Groß meinen Quellcode zu gucken oder zu debuggen bringt mir da leider gar nichts, weil ich wie ich bereits darlegte, gar-keine-Löschbefehle im code implementiert habe.

        Vielleicht überschreibst du ja etwas.

        Lo!

  3. Liebe Fachleute, ich stehe vor einem Rätsel.

    Und war verliere ich Datensätze, die auf meiner Webseite erscheinen sollen.

    Zur Datenbank:
    Die liegt auf einem Apache-Server meines Webhosters und ist eine mysql-Datenbank. In dieser Datenbank ist eine Tabelle mit knapp 12.000 Datensätzen.

    Angesteuert für die Verwaltung der Datensätze wird die mysql-Datenbank, wie oftmals üblich, via php-scriptdateien.

    Nun erlebe ich in willkürlichen Zyklen willkürlichen Datenverlust.

    Betroffen sind in der Regel etwa 10-100 Datensätze. Das seltsame daran  [..]

    Was heisst "Datenverlust"?

    a)
    Das heisst also, du hast in deiner DB nur noch 11.000 und ein paar Zerquetschte oder wenig? Du hast also bei einem select * weniger als 12.000 Datensätze (ursprünglicher Wert)? Oder wird dieser Wert immer wieder neu aufgebaut?

    b)
    Oder sind es immer noch 12.000 Einträge, du findest aber diese bestimmten 10 - 100 Datensätze nicht mehr? Findest also schon mindestens > 100 Datensätze schon nicht mehr, laut deiner Aussage?