Importer cli.php Absturz sicher machen

  • App
    WoltLab Suite Core

    Servus,

    da ich gerade dabei bin mein 3.1 auf die aktuelle Version zu aktualisieren und ich ein doch etwas größeres Forum habe ist für mich der Import mittels der cli.php angebrachter.

    Hierbei tun sich aber einige Schwächen auf nämlich wenn das Script warum auch immer abbricht.

    Bei den reinen Benutzern ist das kein Problem, dort gibt es keine Doppeleinträge. Bei den Benutzergruppen schon
    Foren und Themen werden z.B. doppelt importiert, genau wie auch die PNs

    Es werden ja Zuordnungen in der Datenbank gespeichert aber so richtig funktioniert das Ganze wohl nicht

    Die Idee wäre den Fortschritt vor und nach einer Aktion zu speichern und im Falle eines Crashes wenn man dann die Frage mit N beantwortet der Import automatisch weiter läuft und man nicht wieder alles auswählen muss und neu eingeben muss.

    Nach dem Start und Eingabe aller Daten, Prüfung ob die DB Connection OK ist und ob der Path existiert und man drauf zugreifen kann sollte die KOMPLETTE Auswahl in der Datenbank gespeichert werden, evtl kann man ja dabei das MySQL Passwort weg lassen.

    Jetzt starten wir z.B. mit den Themen und schreiben in die Datenbank welchen Bereich wir machen, also z.B. von 1 bis 1000 für die ersten 1000 Themen

    Sind die ersten 1000 abgearbeitet dann setzen wir in der Datenbank den Eintrag für erfolgreich importierte Themen auf 1-1000 und schreiben in die DB den nächsten Schritt von 1001 bis 2000

    from - to - status

    1 - 1000 - done

    1001 - 2000 - in_progress

    stürzt jetzt der Import bei 1243 ab und wir starten das Script neu dann weiß das Script das der Bereich 1001 - 2000 noch nicht abgeschlossen wurde und löscht genau diesen Bereich und fängt wieder von vorne an diesen Bereich zum importieren, so bleibt dann auch die threadID erhalten und es gibt keine doppelten Einträge

    Ist einer der Hauptpunkte wie Benutzer, Foren, Smileys usw komplett abgeschlossen so wird auch dies in einer extra Tabelle vermerkt

    Ich hoffe ich habe es einigermaßen vernünftig erklärt und es wird auch umgesetzt ;)

    ----====>>>>> ;) (C) 2002-2019 by Afterburner ;) <<<<<====----
    Ein kluger Mann widerspricht keiner Frau. Er wartet, bis sie es selbst tut.
    mysqldump --all -e -l --add-drop-table --single-transaction --host=localhost --user=Benutzername --password=XXXXXX Datenbank >backup.sql
    mysql --host=localhost --user=Benutzername --password=XXXXXX --database=Datenbank <backup.sql

  • Was du möchtest ist ein inkrementelles Importieren und das unterstützt der Importer nicht.

    Das import mapping dient nur dazu die während des importvorgangs geänderten IDs nachvollziehbar verwenden zu können.

    Su kann es z.B. sein dass user während des Imports eine neue userID bekommen und damit sich die nicht dann auch in allen Posts usw ändert gibt es das Import mapping.

    Die eigentliche frage bleibt aber: wiso bricht der cli import bei dir ab ?

    ich hab das bisher mehrere male gemacht und das einzige mal dass er abgebrochen ist war die nicht änderbare php config (1und1 managed server, kein weiterer kommentar zu denen :P ) die nen festes timeout auf cli operationen gesetzt haben.

    An sonsten hatte ich da nie Probleme^^

  • Der Importer ist am Anfang wegen "Error while sending STMT_CLOSE packet" abgeschmiert, mehr dazu und meine Änderungen hier
    Fehler beim Datenimport

    Danach ist er durchgelaufen bis er heute morgen sich beendet hat mit der Message "Kill"

    Ich habe ihn aber definitiv nicht gekillt.

    Laufzeitbegrenzung von CLI kann auch nicht sein da der Prozess jetzt schon wieder seit knapp 9 Stunden läuft was länger ist als beim letzten Run.
    Ich habe einen Managed Server bei Hetzner, also eigentlich gar nicht mal so schlecht ^^

    Nichts desto trotz kann es ja vorkommen das ein Script abschmiert und für den Fall benötigt man dann die Möglichkeit der Wiederaufnahme und so schwer sollte das ja auch nicht umzusetzen sein wenn man sein OBJECT ^^ kennt

    Auch die Option die Datensätze vor dem Import im Zielsystem optional zu löschen, sprich die Tabellen zu leeren wäre hilfreich denn was bringt es mir wenn ich mittels Mod rewrite die Links umschreibe auf das neue System aber die ThreadIDs / BoardIds usw nicht mehr passen

    ----====>>>>> ;) (C) 2002-2019 by Afterburner ;) <<<<<====----
    Ein kluger Mann widerspricht keiner Frau. Er wartet, bis sie es selbst tut.
    mysqldump --all -e -l --add-drop-table --single-transaction --host=localhost --user=Benutzername --password=XXXXXX Datenbank >backup.sql
    mysql --host=localhost --user=Benutzername --password=XXXXXX --database=Datenbank <backup.sql

  • Ach ja bei mir handelt es sich um ca
    3,1 Millionen Beiträge

    44.000 Benutzer

    ----====>>>>> ;) (C) 2002-2019 by Afterburner ;) <<<<<====----
    Ein kluger Mann widerspricht keiner Frau. Er wartet, bis sie es selbst tut.
    mysqldump --all -e -l --add-drop-table --single-transaction --host=localhost --user=Benutzername --password=XXXXXX Datenbank >backup.sql
    mysql --host=localhost --user=Benutzername --password=XXXXXX --database=Datenbank <backup.sql

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!