Skip to main content


Friendica-Datenbank lässt sich nicht wiederherstellen


Ich teste immer ganz gerne zeitnah, nachdem ich einen neuen Dienst installiert habe, den #Restore. So gerade auch bei meiner frisch aufgesetzen #Friendica #Instanz

Der #Dump der Friendica #Datenbank läuft ohne #Fehlermeldung durch.

Beim Restore in eine neue, leere Datenbank, kommt sehr schnell eine lange Fehlermeldung und der Restore bricht ab. 😞

Hat jemand eine Idee?

Gerne teilen für mehr Reichtweite.

Table 'friendica.contact' doesn't exist

Fehler bei der Anfrage:
CREATE ALGORITHM=UNDEFINED DEFINER=`user`@`localhost:3306` SQL SECURITY DEFINER VIEW `account-user-view` AS select `ucontact`.`id` AS `id`,`contact`.`id` AS `pid`,`ucontact`.`uid` AS `uid`,`contact`.`url` AS `url`,`contact`.`nurl` AS `nurl`,`contact`.`uri-id` AS `uri-id`,`item-uri`.`guid` AS `guid`,`contact`.`addr` AS `addr`,`contact`.`alias` AS `alias`,`contact`.`name` AS `name`,`contact`.`nick` AS `nick`,`contact`.`about` AS `about`,`contact`.`keywords` AS `keywords`,`contact`.`xmpp` AS `xmpp`,`contact`.`matrix` AS `matrix`,`contact`.`avatar` AS `avatar`,`contact`.`photo` AS `photo`,`contact`.`thumb` AS `thumb`,`contact`.`micro` AS `micro`,`contact`.`header` AS `header`,`contact`.`created` AS `created`,`contact`.`updated` AS `updated`,`ucontact`.`self` AS `self`,`ucontact`.`remote_self` AS `remote_self`,`ucontact`.`rel` AS `rel`,`contact`.`network` AS `network`,`ucontact`.`protocol` AS `protocol`,`contact`.`location` AS `location`,`ucontact`.`attag` AS `attag`,`contact`.`pubkey` AS `pubkey`,`contact`.`prvkey` AS `prvkey`,`contact`.`subscribe` AS `subscribe`,`contact`.`last-update` AS `last-update`,`contact`.`success_update` AS `success_update`,`contact`.`failure_update` AS `failure_update`,`contact`.`failed` AS `failed`,`contact`.`last-item` AS `last-item`,`contact`.`last-discovery` AS `last-discovery`,`contact`.`contact-type` AS `contact-type`,`contact`.`manually-approve` AS `manually-approve`,`contact`.`unsearchable` AS `unsearchable`,`contact`.`sensitive` AS `sensitive`,`contact`.`baseurl` AS `baseurl`,`contact`.`gsid` AS `gsid`,`ucontact`.`info` AS `info`,`contact`.`bdyear` AS `bdyear`,`contact`.`bd` AS `bd`,`contact`.`poco` AS `poco`,`contact`.`name-date` AS `name-date`,`contact`.`uri-date` AS `uri-date`,`contact`.`avatar-date` AS `avatar-date`,`contact`.`term-date` AS `term-date`,`contact`.`hidden` AS `global-ignored`,`contact`.`blocked` AS `global-blocked`,`ucontact`.`hidden` AS `hidden`,`ucontact`.`archive` AS `archive`,`ucontact`.`pending` AS `pending`,`ucontact`.`deleted` AS `deleted`,`ucontact`.`notify_new_posts` AS `notify_new_posts`,`ucontact`.`fetch_further_information` AS `fetch_further_information`,`ucontact`.`ffi_keyword_denylist` AS `ffi_keyword_denylist`,`ucontact`.`rating` AS `rating`,`ucontact`.`readonly` AS `readonly`,`ucontact`.`blocked` AS `blocked`,`ucontact`.`block_reason` AS `block_reason`,`ucontact`.`subhub` AS `subhub`,`ucontact`.`hub-verify` AS `hub-verify`,`ucontact`.`reason` AS `reason`,`contact`.`notify` AS `dfrn-notify`,`contact`.`poll` AS `dfrn-poll`,`item-uri`.`guid` AS `diaspora-guid`,`diaspora-contact`.`batch` AS `diaspora-batch`,`diaspora-contact`.`notify` AS `diaspora-notify`,`diaspora-contact`.`poll` AS `diaspora-poll`,`diaspora-contact`.`alias` AS `diaspora-alias`,`diaspora-contact`.`interacting_count` AS `diaspora-interacting_count`,`diaspora-contact`.`interacted_count` AS `diaspora-interacted_count`,`diaspora-contact`.`post_count` AS `diaspora-post_count`,`apcontact`.`uuid` AS `ap-uuid`,`apcontact`.`type` AS `ap-type`,`apcontact`.`following` AS `ap-following`,`apcontact`.`followers` AS `ap-followers`,`apcontact`.`inbox` AS `ap-inbox`,`apcontact`.`outbox` AS `ap-outbox`,`apcontact`.`sharedinbox` AS `ap-sharedinbox`,`apcontact`.`generator` AS `ap-generator`,`apcontact`.`following_count` AS `ap-following_count`,`apcontact`.`followers_count` AS `ap-followers_count`,`apcontact`.`statuses_count` AS `ap-statuses_count`,`gserver`.`site_name` AS `site_name`,`gserver`.`platform` AS `platform`,`gserver`.`version` AS `version`,`gserver`.`blocked` AS `server-blocked`,`gserver`.`failed` AS `server-failed` from (((((`contact` `ucontact` join `contact` on(`contact`.`uri-id` = `ucontact`.`uri-id` and `contact`.`uid` = 0)) left join `item-uri` on(`item-uri`.`id` = `ucontact`.`uri-id`)) left join `apcontact` on(`apcontact`.`uri-id` = `ucontact`.`uri-id`)) left join `diaspora-contact` on(`diaspora-contact`.`uri-id` = `ucontact`.`uri-id`)) left join `gserver` on(`gserver`.`id` = `contact`.`gsid`));

Fatal error: Couldn't create table or view `DEFINER´


@Friendica Support
Das da ist gerade nur ein View. Den kannst Du auch später wiederherstellen.
@Michael Vogel

Und wie stelle ich den wieder her?

Das entscheidende Problem ist aber, dass der ganze Restore an der Stelle abbricht und bis dahin nur ganz wenige Tabellen überhaupt angelegt wurden.
@Michael Vogel

Ich habe getestet, was passiert, wenn ich beim Restore die Tabelle account_user_view auslasse.
Dann pasiert dasselbe bei der Tabelle account_view.
Wenn ich auch diese auslasse, bei der Tabelle application_view.

Gemeinsam haben alle diese Tabellen, dass sie eine Größe von 0,00 KB habe und dass bei Avg_row_length VIEW steht.

Von solchen Tabellen gibt es noch jede Menge weitere.

Ich vermute, die müsste ich alle auslassen...
@Michael Vogel

Wie vermutet. Wenn ich diese Tabellen auslasse, läuft der Datenbankrestore durch. Allerdings funktioniert die Instanz damit nicht mehr. So werden z.B. User-Infos nicht mehr gefunden / können nicht angezeigt werden.

Diese 19 Tabellen habe ich weggelassen:
account_user_view
account_view
application_view
category-view
collection-view
diaspora-contact-view
media-view
network-item-view
network-thread-view
owner-view
pending-view
post-thread-user-view
post-thread-view
post-user-view
post-view
profile_field-view
tag-search-view
tag-view
workerqueue-view
@Michael Vogel

Ich denke, das Problem ist, dass diese "Tabellen" gar keine Tabellen sind, sondern "Ansichten"

ANSICHTEN sind virtuelle Tabellen, die keine eigenen Daten speichern, sondern in anderen Tabellen gespeicherte Daten anzeigen. Mit anderen Worten: VIEWS sind nichts anderes als SQL-Abfragen. Eine Ansicht kann alle oder einige Zeilen einer Tabelle enthalten. Eine MySQL-Ansicht kann Daten aus einer oder mehreren Tabellen anzeigen.

https://www.guru99.com/de/views.html

Diese virtuellen Tabellen lassen sich offensichtlich nicht so wiederherstellen wie normale Tabellen - und sind mir bislang bei noch keiner einzigen datenbankbasierten Webanwendung untergekommen.

Wie kriege ich diese "Ansichten" in eine neue Datenbank?
Die Views werden vom System erstellt, wenn Du bin/console dbstructure update -f in der Shell eingibst.
Danke dir.
Zwar kam da eine Fehlermeldung
[Error] Failed opening required 'update.php' (include_path='.:/usr/share/php')

Aber die Views wurden dennoch erstellt und ich schreibe gerade von Friendica, das mit der wiederhergestellten Datenbank arbeitet.