Fehler bei Import eines MySQL-Backups

Hallo,

ich habe eine neue Nextcloud-Installation durchgefĂŒhrt und möchte jetzt eine gesicherte MySQL-Datenbank importieren.

Ich erhalte jedoch folgende Fehlermeldung:

ERROR 1071 (42000) at line 179: Specified key was too long; max key length is 767 bytes

Wenn ich mir das SQL-File ansehe, ist die Zeile 179 der Bereich wo, die AdressbĂŒcher importiert werden, genauer gesagt das Create Table Statement:

DROP TABLE IF EXISTS `oc_addressbooks`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `oc_addressbooks` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `principaluri` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
  `displayname` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
  `uri` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
  `description` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
  `synctoken` int(10) unsigned NOT NULL DEFAULT 1,
  PRIMARY KEY (`id`),
  UNIQUE KEY `addressbook_index` (`principaluri`,`uri`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=COMPRESSED;
/*!40101 SET character_set_client = @saved_cs_client */;

habe den Import sowohl mit PuTTY als auch mit phpMyAdmin probiert, Meldung ist identisch.

jemand eine Idee?

Welche collation sollten die Tabellen eigentlich haben?

Bei mir ist es utf8mb4_bin, ist das richtig bzw. Standard?

Hallo @ssg_mick,

“varchar (255)” kann bei utf8mb4 Probleme bereiten, “max key length is 767 bytes” ist genau der passende Fehler. Du musst dort maximal varchar (171) als FeldlĂ€nge angeben.
Am Besten im Editor, ersetze “varchar (255)” mit “varchar (170)”, dann sollte es funktionieren.
Das SQL-File aber vorher sichern!
Alternativ kannst Du Deine Collation auf “utf8_bin” Ă€ndern.

Gruß
Crashandy

Hallo Crashandy,

der Tipp hat geklappt, ich konnte das SQL-File ohne Fehler importieren.

Jetzt habe ich zwar noch ein Problem mit dem Login, aber das liegt vermutlich nicht daran.

Der Import klappt wie gesagt jetzt. MerkwĂŒrdigerweise kann ich mich nicht anmelden, ich erhalte die Meldung “falsches Passwort”.

Ich habe folgendes gemacht:

  1. neue Nextcloud-Installation auf Webserver
  2. MySQL-Sicherung (nextcloud.sql) importiert
  3. config.php angepasst, um auf den externen Object Storage zu connecten
  4. Anmeldung klappt nicht, Meldung “falsches Passwort”

Der User, mit dem ich mich anmelde, ist in der importierten MySQL DB vorhanden. Ich kann mich damit auch an der “alten” Instanz anmelden, aus dem die MySQL-Sicherung stammt.

Mein Ziel ist es, die bestehende Instanz auf einem anderen Server neu zu installieren.

Kommst Du auch nicht als Admin in Deine Nextcloud?
Wenn nur bei den Benutzern das Passwort nicht funktioniert, dann wĂŒrde ich ein neues vergeben.

Du könntest noch versuchen die Tabelle oc_users zu löschen und aus der originalen SQL-Sicherung die SQL-Befehle neu einfĂŒgen ohne varchar (255) beim Passwort zu Ă€ndern.

CREATE TABLE oc_users (
uid varchar(64) NOT NULL DEFAULT ‘’,
displayname varchar(64) DEFAULT NULL,
password varchar(255) NOT NULL DEFAULT ‘’
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

und

INSERT INTO oc_users (uid, displayname, password) VALUES
(‘Benutzer’, NULL, ‘Passwort’),
usw.

Alternativ wĂŒrde ich mal die Collation auf “utf8_bin” Ă€ndern und die originale SQL-Sicherung einspielen. Einfach um zu schauen, ob der Fehler auch dann noch da ist.

das Passwort ist aber doch bestimmt codiert in der Tabelle eingetragen, oder?

Ja natĂŒrlich.
Mit dem SQL-Befehl wird ja auch alles 1:1 ĂŒbertragen.

Was passiert denn, wenn Du auf “Passwort vergessen?” klickst?

2018-10-30%2017_14_52-Window

Hallo,

habe jetzt die Tabelle oc_users in der neuen DB gelöscht, manuell neu angelegt und mit den Originalwerten aus der ursprĂŒnglichen DB gefĂŒllt.

Leider keine Änderung des Problems.

Passwort vergessen habe ich auch probiert, da erhalte ich nur folgende Meldung, obwohl Mailversand in der Original-Umgebung funktioniert:

Die E-Mail zum ZurĂŒcksetzen konnte nicht versendet werden. Bitte kontaktiere Deinen Administrator.

Ich bin ratlos.

Hast Du diesen Schritt auch schon mal probiert?
Ich wĂŒrde mir eine völlig neue Datenbank mit Collation “utf8_bin” anlegen, das originale SQL-Backup importieren und nur die config.php entsprechend Ă€ndern. Mit dem Austausch der config.php könntest Du von einer in die andere Instanz wechseln, vorausgesetzt die Rechte hast Du richtig gesetzt.
Interessant wÀre noch zu wissen, auf welchem System die alte Instanz lÀuft und wohin Du nun gehen möchtest.

Könntest Du davon noch genauere Angaben machen? Vielleicht liegt der Fehler ja noch ganz woanders.
Wenn nÀmlich die Zuordnung zum Datenordner mit den jeweiligen Benutzern nicht stimmt, dann bekommst Du auch keinen Zugriff auf Dein System.