Could not execute statement 'ALTER TABLE -> userOption

  • Affected Version
    WoltLab Suite 3.1

    Hallo Zusammen


    Ich jage nun schon einige Tage einem Problem hinterher was ich einfach nicht gelöst bekomme.


    Am Donnerstag habe ich ein Plugin installiert, da ist mir aufgefallen dass dies vermutlich meine Teaser Box Blockt. Also habe ich es deinstalliert und die Box war wieder da. Ich habe dann den Entwickler informiert und dann kam dazu auch schon ein Update. Nur leider kann ich seit der deinstallation des Plugins keine weiteren, neuen Pakete mehr installieren weil ich immer unten stehende Meldung bekomme. Die ID der wcfX_user_option ändert sich bei jedem Versuch ein Plugin zu installieren. Angefangen bei 113 und die aktuellste Meldung heute morgen die ID 116.


    Die ID oder ein Zusammenhang zur ID habe ich in der Datenbank gesucht in folgenden Tabellen

    • wcfX_user_option
    • wcfX_user_option_category
    • wcfX_user_option_value


    Zudem auch was zwar Sinnlos ist wenn es ja nicht in der DB steht auch im ACP nachgeschaut. Jedoch ist die höchste ID die eingetragen ist die userOption111


    Folgendes habe ich dann noch geprüft / gelöscht

    • Cache gelöscht ACP
    • Cache gelöscht FTP
    • Compiled Templates gelöscht
    • Foreign Key check (alles OK)



    Den Entwickler habe ich kontaktiert aber er sagte mir dass es nicht von dem Plugin kommen kann da sie ja auch nur die Bordmittel nutzen zum hinzufügen einer Option was auch klar ist. Das Problem besteht halt immer noch und ich hoffe jemanden mit einer Lösung zu finden.


    Danke gruss Grischabock

  • Aus der Ferne und ohne tiefere Zusammenhänger innerhalb des WSC, einfach nur aus der Struktur der Datenbank geschlossen vermute ich, dass es eine Diskrepanz zwischen den Tabellen wcf1_user_option und wcf1_user_option_value, sowie dem Autoinkrement der Tabelle wcf1_user_option gibt.


    Schau' doch mal, was die höchste aktiv genutzte ID in der wcf1_user_option ist, und wie der Autoinkrement steht. Dann vermute ich, dass es in der wcf1_user_option_value Spalten gibt, die es laut den beiden Werten zuvor nicht geben dürfte.


    Denn letztlich fällt Dein WSC auf die Nase, wenn es in der wcf1_user_option_value eine Spalte hinzufügen will, weil es diese Spalte schon gibt. Beim Anlegen neuer Spalten in der wcf1_user_option_value vermute ich, richtet sich das WSC nach wcf1_user_option und dem Autoinkrement.

  • Die Spalten 117, 118, und 119 könnten schon sein, dann müsste der Autoinkrement aber auf 120 stehen.

    Du hast übrigens noch nicht gesagt, wie der Autoinkrement-Zähler der Tabelle wcf1_user_option steht.


    Interessant ist, dass er ein ALTER TABLE für eine Spalte 116 machen will. Das müsste aber doch funktionieren, wenn es wie Du sagst diese Spalte nicht gibt.

  • Autoinkrement steht nur wert hinzufügen wie im letzten screenshot. Oder schaue ich am falschen ort?

    Kann ich Dir nicht sagen, ich benutze keine grafischen DB-Spielzeuge... ;)


    Ich prüfe sowas mit:

    SELECT auto_increment FROM information_schema.tables WHERE table_schema = '<Deine DB>' AND table_name= 'wcf1_user_option';


    Das <Deine DB> musst Du durch den Namen Deiner Datenbank ersetzten. Die Abfrage musst Du im Zweifel als DB-Admin ausführen.

    • Official Post

    Ich entsinne mich an einen Hinweis von Tim Düsterhus, dass MySQL < 8 bei einem Neustart den Autoindex neu berechnet, so dass dieser auf MAX+1 gesetzt wird.

    […] In MySQL 8.0, this behavior is changed. The current maximum auto-increment counter value is written to the redo log each time it changes and is saved to an engine-private system table on each checkpoint. These changes make the current maximum auto-increment counter value persistent across server restarts.

  • Auf jeden Fall ist ein Autoincrement von 117 in der Tabelle wcf1_user_option und eine vorhandene Spalte userOption117 in der Tabelle wcf1_user_option_value nicht gut! Das ist doch recht inkonsistent. :(


    Als Lösung könntest Du den Autoincrement-Zähler auf einen Wert setzten der +1 der höchsten UserOptionXXX ist, also auf XXX+1

  • Danke euch, nun klappt es wieder. Hoffe ich :)

    Ein Paket konnte nun mal wieder installiert werden. Die ID wurde zwar nach dem Server restart zurückgesetzt aber auf eine ID welche schon in benutzung ist. Ich dachte dann er macht selbst +1 aber dem war nicht der Fall. So habe ich einfach ALTER TABLE `wcf1_user_option` auto_increment=neuerstand gemacht und nun scheint es zu klappen.


    Hoffe mal es war nicht der dümste einfall :)

  • Passt, aus meiner Sicht sollte es das gewesen sein. Lücken in den userOptionXXX-Spalten sind vom System ja scheinbar vorgesehen bzw. berücksichtigt, nur halt eben doppelte nicht. :)

Participate now!

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