wake-up-neo.net

mysqldump Probleme mit Wiederherstellungsfehler: 'Bitte den Tabellenbereich vor IMPORTIEREN'

Ich führe täglich eine Sicherungskopie der mysqldump-Sicherungskopie der Produktionsdatenbank aus (mysql-Version 5.1.66):

mysqldump --user=username --password=secret -C -e --create-options --hex-blob --net_buffer_length=5000 databasename > file

Ich mache auch eine tägliche Wiederherstellung dieser Datenbank auf meinem Entwicklungscomputer (MySQL-Version 5.6.12).

mysql --user=username --password=secret databasename < file

Ich erhalte die Fehlermeldung: FEHLER 1813 (HY000) in Zeile 25: Tabellenbereich für Tabelle 'databasename.tablename' ist vorhanden. DISCARD den Tablespace vor IMPORT.

Mein Ergebnis deutet darauf hin, dass für die Datenbank mysql innodb der Befehl erforderlich ist:

 ALTER TABLE tbl_name DISCARD TABLESPACE;

wird ausgeführt, bevor die Tabelle gelöscht wird. Es scheint, dass das Löschen der Tabelle nicht ausreicht, um die Indizes zu löschen.

Ich möchte die 'replace'-Option nicht verwenden, da sich in meiner Entwicklungsdatenbank möglicherweise Daten befinden könnten, die in der Produktionsdatenbank gelöscht wurden.

nach dem Fehler sind die Tabellen nicht lesbar, aber der Neustart von mysqld behebt das Problem.

Die Frage ist also: Gibt es eine mysql dump Option, die dieses Problem behebt, oder gibt es eine andere Möglichkeit, die Daten zu importieren, die den Fehler verhindern?

vielen Dank im Voraus für das Lesen.

20
pgee70

Klingt, als hätten Sie einen Tabellennamen.ibd, aber keinen Tabellennamen.frm.

Überprüfen:

  1. cd in Ihr mysql data-Verzeichnis und dann den Datenbanknamen.
    cd/var/lib/mysql/datenbankname
  2. Suchen Sie nach dem Tabellennamen, der den Fehler angibt.

    ls Tabellenname. *

    Sie sollten zwei Dateien sehen: 

     Tabellenname.ibd 
     Tabellenname.frm 
    

    Aber ich vermute, dass Sie es nicht sehen und nur sehen 

    tabellenname.ibd

Um das Problem zu beheben, haben Sie einige Möglichkeiten

  1. Fügen Sie Folgendes zu mysqldump hinzu, wodurch die Datenbank vor der Wiederherstellung gelöscht und das Datenverzeichnis gesäubert wird.
    --add-drop-Datenbank
  2. Kopieren Sie die Tabellenname.frm von prod in dev und geben Sie dann eine Anweisung zum Löschen der Tabelle aus.

Ebenfalls:

  • Sie müssen net_buffer_length = 5000 nicht verwenden, wenn Sie eine Datei auf localhost sichern.
  • Andere Backup-Lösungen - Percona Xtrabackup
38
Dave

Der einfachste Weg, dieses Problem zu überspringen, war die manuelle Bearbeitung des phumpyadmin-Datenbank-Dumps sowie die Bearbeitung/Änderung der Tabelle, die Probleme mit etwas anderem als INNODB hatte. Ich habe die Problemtabelle in ENGINE=MyISAM und voila geändert. Import funktioniert.

CREATE TABLE IF NOT EXISTS `home3_acymailing_tag` (
    `tagid` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
    `name` varchar(250) NOT NULL,
    `userid` int(10) unsigned DEFAULT NULL,
    PRIMARY KEY (`tagid`),
    KEY `useridindex` (`userid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
7
SamTzu

Dieses Problem ist auch aufgetreten, als ein Schema gelöscht und erneut erstellt wurde. Ich bewältige dieses Problem, indem ich C:\ProgramData\MySQL\MySQL Server 5.6\data\my_database_name lösche und die verbleibenden Tabellen aus der vorherigen Datenbankerstellung lösche. Sie können auch die gesamte Datenbank löschen, wenn Sie möchten.

3
ÖMER TAŞCI

wenn Sie XAMPP verwenden, dann zuerst ("stop") MySQL Gehen Sie dann zu C:\xampp\mysql\data\dnb In meinem Fall ist dnb mein Datenbanknamensordner . Öffnen Sie es dann und löschen Sie die .ibd-Datei. Sie können sie also nur löschen, wenn Sie MYsql . bereits angehalten haben. Gehen Sie dann zu phpmyadmin 1 klicken Sie auf phpmyadmin . 2 Wenn es sich um eine Änderung handelt. 3. Überprüfen Sie dann Ihre Datenbank, die Sie löschen möchten, und klicken Sie auf Drop .. 4. Dann können Sie eine Datenbank mit demselben Namen erstellen und Ihre Datenbank erfolgreich importieren . hier können Sie sehen, wie Sie löschen die Datenbank von phpmyadmin

0
Noman Hassan