datenverlust durch mysqli?

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

  • datenverlust durch mysqli?

    hallo,

    ich habe vor einiger zeit in meinen scripts von mysql auf mysqli funktionssatz gewechselt. läuft auch alles prima. allerdings sind jetzt doch ab und zu datenverluste aufgetreten bei der tabelle wo ein insert durchgeführt wurde. dies passiert zwar selten, aber dann doch sehr ärgerlich. jetzt frage ich mich ob das an mysqli liegt. hat jemand ähnliche probleme festgestellt?

    noch eine sache. ich mache vor insert & update ein "LOCK TABLES `$table` WRITE" und danach ein "UNLOCK TABLES;". aber daran könnte es ja wohl nicht liegen, oder?
    Erfahrungen vererben sich nicht jeder muss sie allein machen.

  • #2
    Hallo,

    garantieren kann ich es dir nicht, aber ich bin sicher, das hat nichts miteinander zu tun. Protokolliere jedes Fehlverhalten mit allem drum und dran, dann sollte sich irgendwann eine reproduzierbare Ursache herauskristallisieren.

    *move* ins SQL-Forum.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Wieso blockierst du die Tabelle überhaupt? Was machst du da genau in den INSERTs und UPDATEs?

      MySQL :: MySQL 5.0 Reference Manual :: 12.3.5.1 Interaction of Table Locking and Transactions

      Kommentar


      • #4
        @Amica
        ich protokoliere welche aktionen der user macht. und es passiert eben hauptsächlich beim insert.

        @onemorenerd
        ich denke das es sicherer ist. ist es nicht so das dann die inserts nach ein ander ausgeführt werden? oder habe ich das falsch verstanden.

        ein typischer insert bei mir sieht z.b. so aus:
        Code:
        SQL = LOCK TABLES `tabelle` WRITE
        SQL = insert into tabelle (sortID, date, shortText1, shortText2, longText1, activity) values ('8', '1278453600', 'test', 'test', 'test', '1')
        SQL = UNLOCK TABLES;
        also ganz normal
        Erfahrungen vererben sich nicht jeder muss sie allein machen.

        Kommentar


        • #5
          Zitat von joextra Beitrag anzeigen
          ein typischer insert bei mir sieht z.b. so aus
          Dann ist das Locking komplett überflüssig, da dieses eine Insert in sich selbst atomar ist und auch keine anderen Tabellen beeinflusst, es sei denn, du hast noch irgendwelche Trigger gesetzt.
          [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
          Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
          Super, danke!
          [/COLOR]

          Kommentar


          • #6
            ne, trigger benutze ich nicht. dann kann ich das "locken" also weg machen. trotzdem frage ich mich wie es zu diesem datenverlust kommen kann.
            Erfahrungen vererben sich nicht jeder muss sie allein machen.

            Kommentar


            • #7
              Hallo

              Hi,
              was genau meinst du mit Datenverlust? Ganze Sätze? Oder korrumpierte Daten in einzelnen Spalten in einzelnen Sätzen? etc.

              Kommentar


              • #8
                die tabelle, in der zb. ein insert durchgeführt wurde, war auf ein mal leer (nur der letzte datensatz der eingetragen/geendert wurde war noch drin). das problem habe ich bis jetzt bei 3 verschiedenen projekten bei unterschiedlichen hostern.
                auf meinem localhost (win7, entwicklungsrechner) hatte ich das problem noch nicht
                Erfahrungen vererben sich nicht jeder muss sie allein machen.

                Kommentar


                • #9
                  die tabelle, in der zb. ein insert durchgeführt wurde, war auf ein mal leer
                  Werden z.B. zum löschen Links verwendet?
                  Und hat eine SUMA evtl. die Seite gefunden?
                  Und dann auf allen Links rumgetrampelt?
                  Wir werden alle sterben

                  Kommentar


                  • #10
                    1. um ins backend zu gelangen, muss man sich erst einloggen. ohne einloggen kann man keine aktion ausführen. wenn man ohne eingeloggt zu sein, einen link ausführt, landet man direkt auf die login seite.
                    2. das backend ist für suchmaschinen(bots) gesperrt.
                    3. es wurde ein insert bzw. update durchgeführt, aber KEIN delete.
                    4. problem ist passiert wenn ein "mensch" etwas geinsert oder geupdatet hatte. da ich die aktionen mittracke, kann ich auch ausschließen das jemand absichtlich die ganzen daten gelöscht hat.
                    also kann ich das ausschließen
                    Erfahrungen vererben sich nicht jeder muss sie allein machen.

                    Kommentar


                    • #11
                      hm, also ich kann mir beim besten willen nicht vorstellen dass das irgendwas mit mysqli zu tun hat. kannst bugs ausschliessen? kann man ja eigentlich nie. hatte letzthin was aehnliches u nach stundenlanger suche stellte sich raus, ich hab das where vergessen. peinlich peinlich. handelts sich um sehr grosse datenmengen? welche storage engine? immer die gleiche mysql version bei den versch hostern?

                      Kommentar


                      • #12
                        also, ich verwende eine kleine lib die ich geschrieben habe. davor lief die mit den mysql befehlssatz (ohne probleme). dann habe ich diese auf mysqli umgestellt. allerdings habe ich ein paar sachen eingebaut.
                        1. ich mache gleich nach der connection ein $this->query("SET NAMES 'utf8'");
                        2. die daten werden "normalisiert" mit: $mysqlString = "'" .((strcmp(PHP_VERSION, '4.3.0') < 0) ? $this->connection->escape_string($mysqlString) : $this->real_escape_string($mysqlString)). "'";
                        3. die tables werden gelockt beim schreiben und updaten (das habe ich aber vor kurzem wieder entfernt, da es für meine zwecke wohl unnötig ist)
                        Erfahrungen vererben sich nicht jeder muss sie allein machen.

                        Kommentar


                        • #13
                          mysqli löscht keine Daten von alleine.

                          Ich würde mal alle Queries mitloggen, die ausgeführt werden. Wenn hier nichts ersichtlich ist würde ich noch einen Schritt weiter gehen und den Query-Log von MySQL sezieren.

                          Was natürlich auch sein könnte ist, dass bestimmte Schreibvorgänge gar nicht erfolgreich sind. Aber dies wirst du doch hoffentlich abfangen und mitloggen.

                          Und zu allerletzt könnte es auch sein, dass du eine Transaktion startest, diese aber nicht commitest.
                          Zuletzt geändert von h3ll; 11.07.2010, 11:13.

                          Kommentar


                          • #14
                            Fragst du auch nach jedem Statement eventuell aufgetretene Fehler ab?
                            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                            Super, danke!
                            [/COLOR]

                            Kommentar


                            • #15
                              ich sollte dann bei gelegenheit die klasse erweitern und noch mehr mitloggen

                              welche storage engine?
                              MYISAM
                              Zuletzt geändert von joextra; 11.07.2010, 17:20.
                              Erfahrungen vererben sich nicht jeder muss sie allein machen.

                              Kommentar

                              Lädt...
                              X