Update ging schief

Moin

gestern ist mir leider ein kleiner Supergau passiert, als ich von NC 15.0.8 per Web Updater auf 16.0.1 updaten wollte. Der erste Teil des Updates lief durch (Backup, Download usw.). Der zweite Teil des Updates (“Nextcloud wird auf Version 16.0.1 aktualisiert”) bricht allerdings mit der folgenden Fehlermeldung ab:

Aktualisierung auf 16.0.1

Doctrine\DBAL\Exception\DriverException: An exception occurred while executing ‘CREATE TABLE oc_login_flow_v2 (id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL, timestamp BIGINT UNSIGNED NOT NULL, started SMALLINT UNSIGNED DEFAULT 0 NOT NULL, poll_token VARCHAR(255) NOT NULL, login_token VARCHAR(255) NOT NULL, public_key TEXT NOT NULL, private_key TEXT NOT NULL, client_name VARCHAR(255) NOT NULL, login_name VARCHAR(255) DEFAULT NULL, server VARCHAR(255) DEFAULT NULL, app_password VARCHAR(1024) DEFAULT NULL, UNIQUE INDEX poll_token (poll_token), UNIQUE INDEX login_token (login_token), INDEX timestamp (timestamp), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin ENGINE = InnoDB ROW_FORMAT = compressed’: SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes

Detaillierte Protokollmeldungen

Das Update ist fehlgeschlagen. Bitte melden Sie dieses Problem an die Nextcloud Community.

Bin etwas verzweifelt, da ich keine Ahnung habe, was ich jetzt tun soll?! Ich würde ja versuchen auf die 15.0.8 zurück zu gehen, aber irgend etwas wurde ja schon vor dem Abbruch mit der Datenbank gemacht. Oder den Fehler fixen (wie?). Oder neu installieren. Letzteres wäre mir eigentlich am liebsten, aber ich bräuchte die Daten, die mittlerweile in der Installation stecken, vor allem den Kalender… :roll_eyes:

Kurz gesagt ich komme nicht weiter und würde mich sehr über hilfe freuen!

Viele Dank!

Beste Grüße

Thorsten

Das ist ein Problem mit deiner MySQL Konfiguration. Je nachdem welche MySQL Version du einsetzt könnte die Lösung etwas unterschiedlich aussehen.

Einen ersten Hinweis gibts bei Stackoverflow:

Ab einer bestimmten MySQL Version waren die o.g. Einstellungen glaub ich default.

SELECT version();

10.0.38-MariaDB-0ubuntu0.16.04.1

Ich hatte eine ähnliche Fehlermeldung in der Tat schon als ich versucht habe das UTF8 Problem zu lösen…

PS: Wegen shared hosting habe ich nur Zugriff auf die Datenbank via phpMyAdmin. Kann ich damit etwas ausrichten?

MariaDB 10 entspricht scheinbar MySQL 5.5 mit ein paar MySQL 5.6 Backports.

Du kannst versuchen, die Konfigurationen wie in dem Stackoverflow-Post beschrieben per phpMyAdmin zu setzen, ich gehe aber davon aus das du bei Shared Hosting nicht die notwendigen Rechte dafür hast.
Bleibt wohl nur beim Hoster anzufragen, ob sie die Einstellungen zentral setzen oder MariaDB aktualisieren können.

Mein Hoster bietet MySQL 5.7, da lassen sich aktuelle Nextcloud-Versionen problemlos installieren.

OK, danke! Habe jetzt mal den Provider angeschrieben. Mal sehen was er antwortet!
Könnte ich meine komplette Installation samt aller Daten zur Not auf einen neuen Server umziehen? Ich meine so “mitten” in einem noch nicht abgeschlossenen Update?

Puh, gute Frage. Ich würde mal sagen: prinzipiell ja. Migration ist ja nix anderes als “Backup & Restore”.

Beim nächsten Mal machst du vielleicht noch ein Backup bevor du das Upgrade startest… :wink:

Wo Du recht hast, hast Du recht (bzgl. Backup)… :wink:
Brüller des Tages: es ging bisher immer gut mit dem Update…

Manche Provider erlauben auch bei shared-hosting Paketen die Ausführung von Skripten mit der PHP_Funktion exec über bestimmte PHP-Funktionen. Dann könnte es eventuell funktionieren, den Kalender mit dem Skript calcardbackup aus der bestehenden Datenbank zu extrahieren. Ob das bei jedem Provider klappt, weiß ich nicht, da die Umgebungen jeweils verschieden eingerichtet sind. Ich habe das allerdings gerade bei meinem Account bei all-inkl (privat) versucht und da hat es geklappt. Wichtig ist, dass du die no-fd-Branch von calcardbackup benutzt (sie kommt ohne file-descriptors aus, die zumindest bei meinem Hoster nicht funktionieren: GitHub - BernieO/calcardbackup at no-fd)
(das Repo auf GitHub ist veraltet. Bitte nur noch calcardbackup von codeberg benutzen)

Die folgende Vorgehensweise ist veraltet. Siehe das Edit vom 27.05.2021 am Ende dieses Beitrags.

Falls du das versuchen möchtest:
1. calcardbackup_no-fd in deinen Webspace hochladen (am Besten in das Verzeichnis cgi-bin, falls es existiert).
2. eine phpx-Datei mit folgendem Inhalt erstellen und irgendwo auf deinem Webserver ablegen (bei dem exec-Kommando den Pfad zu calcardbackup und zum Nextcloud-Installationsverzeichnis relativ zur phpx-Datei anpassen!). Wichtig ist, dass der Dateiname der phpx-Datei die Endung .phpx hat:

<?php
exec("/usr/bin/env bash ../cgi-bin/calcardbackup pfad/zu/Nextcloud/ -na 2>&1", $out, $result);
echo "Returncode: " .$result ."<br>";
echo "Ausgabe des Scripts: " ."<br>";
echo "<pre>"; print_r($out);
?>

3. Die gerade erstellte phpx-Datei mithilfe eines Browsers ansurfen

Mit der Option -na werden nur die Kalender gesichert. Falls du auch Adressbücher sichern möchtest, einfach die Option ändern in -nc und das phpx-Skript noch einmal aufrufen.

EDIT 27.05.2021: diese Vorgehensweise ist unnötig kompliziert und veraltet, denn im calcardbackup-Repo bei codeberg ist mittlerweile das Skript calcardbackup_wrapper.php enthalten, das den ganzen Prozess vereinfacht. Im Abschnitt Kann ich das auch ohne Shell Zugang zu meinem Server benutzen? des README wird die Vorgehensweise genau beschrieben.

Danke sehr für die ausführliche Antwort! Um ehrlich zu sein habe ich die Nextcloud Installation mittlerweile einfach gelöscht. Wirklich Mist aber nicht der Weltuntergang. Nächstes Mal mache ich dann ein Backup vor jedem Update. Frage mich nebenbei allerdings auch, warum sämtliche Updates bei z.B. Wordpress seit Jahren problemlos durchlaufen und Nextcloud immer wieder Ärger macht. Vielleicht lasse ich NC noch ein paar Jahre reifen und schaue 2025 wieder rein… :stuck_out_tongue_winking_eye:

1 Like