it-swarm.com.de

"Tabelle existiert nicht in Engine" nach dem Verschieben von Tabellen von einem VPS zu einem anderen

Ich habe gerade zwei VPS. Einer, den ich als "alten" Server bezeichnen werde, läuft auf Debian 7 und gibt diese Ausgabe für mysql --version:

mysql Ver 14.14 Distrib 5.5.44, for debian-linux-gnu (x86_64) using readline 6.2

Der andere, den ich als "neuen" Server bezeichnen werde, läuft auf einer brandneuen Installation von Debian 8 und gibt diese Ausgabe aus:

mysql Ver 15.1 Distrib 10.0.20-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

Ich versuche, meine Datenbanken und Tabellen vom alten Server auf den neuen Server zu verschieben. Ich dachte, ich könnte dies tun, indem ich einfach das Verzeichnis /var/lib/mysql/ Vom alten Server kopiere und dasselbe Verzeichnis auf dem neuen Server überschreibe. Danach erhalte ich jedoch diesen Fehler in phpMyAdmin auf dem neuen Server, wenn ich auf eine der Tabellen oder Datenbanken klicke:

#1932 - Table 'phpmyadmin.pma__tracking' doesn't exist in engine

Ich kann jedoch deutlich sehen, dass es existiert:

(enter image description here

Gibt es eine Lösung dafür? Ich bin mir nicht sicher, was ich falsch gemacht habe. Vielen Dank!

4
Mitch Talmadge

Ich habe das Problem durch folgende Antwort gelöst: https://stackoverflow.com/a/11506495/2364405

Außer mit diesen Änderungen:

  • In Schritt 5 habe ich nicht create_tables.sql Gefunden, sondern stattdessen create_tables.sql.gz. Ich habe WinSCP verwendet, diese Datei heruntergeladen und dann in phpMyAdmin importiert (dies erledigt die Schritte 6 und 7).
  • In Schritt 8 habe ich nur den Benutzernamen/das Passwort geändert. Meine Tabellen haben ZWEI Unterstriche (z. B. pma__bookmark), Daher habe ich sie nicht in einen Unterstrich geändert.

Irgendwie konnte ich phpMyAdmin wieder fehlerfrei verwenden. :) :)

0
Mitch Talmadge

Sie können Dateien von einem Server auf den nächsten kopieren, um Ihre Datenbank zu verschieben. Dazu müssen Sie sicherstellen, dass beide Instanzen Ihrer Datenbank gestoppt sind. Ich empfehle auch, rsync zu verwenden, um Ihre Datenbankdateien zu kopieren. Sie müssen nicht nur sicherstellen, dass beide Datenbankserver gestoppt sind, bevor Sie die Dateien verschieben, sondern auch höchstwahrscheinlich den Besitz Ihrer Dateien ändern. Sudo chown --recursive mysql:mysql /var/lib/mysql bevor Sie Ihre neue Instanz starten.

Es gibt andere Optionen zum Verschieben Ihrer Datenbank. Wenn Ihre Datenbank nicht besonders groß ist, ist mysqldump wahrscheinlich die einfachste. Ich habe die Dokumentation für mysqldump unten angehängt, wie von MariaDB bereitgestellt, da Sie MariaDB verwenden.

https://mariadb.com/kb/en/mariadb/mysqldump/

Eine weitere Option, die etwas komplexer, aber in Bezug auf die Größe etwas flexibler ist, wäre Perconas xtrabackup .

https://www.percona.com/software/mysql-database/percona-xtrabackup

4
Nathan

Wenn Sie Ihre Datenbank nur von einem Ordner in einen anderen Ordner verschieben, Ihre InnoDB-Tabellen jedoch nicht mehr funktionieren, weil sie nicht gefunden werden können und die Fehlermeldung "Tabelle existiert nicht in der Engine" angezeigt wird, werden diese SQL-Paare angezeigt Aussagen können so schnell wie hilfreich sein:

ALTER TABLE __yourtable_name__ DISCARD TABLESPACE ;

ALTER TABLE __yourtable_name__ IMPORT TABLESPACE ;

In der Praxis wird die Datei .IDB Von der Datei .FRM Getrennt und dann erneut gebunden, sodass der Tabelleninhalt lesbar wird.

In meinem Fall hat es funktioniert. Hoffe auch deins.

1
Sandro Rosa

Ich habe denselben Fehler erhalten, nachdem ich ein mysqldump-Backup auf einen neuen Computer verschoben und einige Aktualisierungen an der Datenbank vorgenommen habe. Ich habe einen eindeutigen Index gelöscht, der einen Schlüssel für eine fremde Einschränkung enthielt.

Ich habe festgestellt, dass es sich um einen Fremdschlüsselfehler handelt, der Folgendes verwendet: show engine innodb status.

------------------------
LATEST FOREIGN KEY ERROR
------------------------
2019-07-23 10:43:05 0x7f68a4255700 Error in foreign key constraint of table lhprovedorinfo/NOTAFISCAL:
there is no index in the table which would contain
the columns as the first columns, or the data types in the
table do not match the ones in the referenced table
or one of the ON ... SET NULL columns is declared NOT NULL. Constraint:

Danach habe ich die Fremdschlüsselprüfungen deaktiviert mit: set FOREIGN_KEY_CHECKS = 0; Löschen Sie dann den Fremdschlüssel und erstellen Sie ihn neu, um mit MySQL die erforderlichen Indizes zu erstellen. Und mein Tisch wurde wieder lebendig.

Hoffe es hilft jemandem.

0
Leandro Costa