2013-07-29 7 views
19

ich ein tägliches Backup mysqldump Sicherung der Produktionsdatenbank (MySQL Version 5.1.66) laufen:mysqldump Probleme mit dem Fehler wiederherzustellen: ‚Bitte entsorgen Sie den Tabellen vor IMPORT‘

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

ich auch eine tägliche Wiederherstellung dass Datenbank auf meiner Entwicklung Maschine (mySQL Version 5.6.12)

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

ich den Fehler: eRROR 1813 (HY000) in Zeile 25: Tablespaces für die Tabelle 'databasename. tablename existiert. Bitte löschen Sie den Tablespace vor dem IMPORT.

Meine Lektüre zeigt dies liegt daran, dass die MySQL InnoDB-Datenbank den Befehl erfordert:

ALTER TABLE tbl_name DISCARD TABLESPACE; 

ausgeführt werden, bevor die Tabelle gelöscht wird - es scheint, dass die Tabelle löschen nicht ausreicht, um ihre loswerden Indizes. (mein Entwicklungsserver verwendet die Option innodb_file_per_table)

Ich möchte nicht die Option 'Ersetzen' verwenden, weil ich möglicherweise Daten in meiner Entwicklungsdatenbank haben könnte, die in der Produktionsdatenbank gelöscht wurde.

BTW nach dem Fehler sind die Tabellen nicht lesbar, aber Neustart mysqld behebt es.

Die Frage ist also, gibt es eine mysql-Dump-Option, die dazu beitragen wird, dieses Problem zu beheben, oder gibt es eine andere Möglichkeit, die Daten zu importieren, die den Fehler verhindern?

danke im Voraus für das Lesen.

Antwort

38

Klingt wie Sie haben eine Tabellenname.ibd, aber keine tablename.frm.

zu prüfen:

  1. cd zu Ihrem MySQL-Datenverzeichnis dann der Name der Datenbank.
    cd /var/lib/mysql/database_name
  2. Suchen Sie nach dem Tabellennamen, der den Fehler angibt.

    ls tablename.*

    sollten Sie zwei Dateien sehen:

     
    tablename.ibd 
    tablename.frm 
    

    Aber ich vermute, Sie dies nicht tun und sehen nur

    tablename.ibd

beheben Sie ein paar Optionen:

  1. Fügen Sie die Folge zu mysqldump, die den d verursachen wird atabase, die gelöscht werden soll, Bereinigung des Datenverzeichnisses vor der Wiederherstellung.
    --add-drop-database
  2. Kopieren Sie die Tabellenname.frm von Prod über zu Dev und geben Sie dann eine Anweisung zum Löschen der Tabelle aus.

auch:

  • Keine Notwendigkeit = 5000 zu verwenden net_buffer_length, wenn Sie in einer Datei auf localhost sind Dumping.
  • Andere Backup-Lösungen - Percona Xtrabackup
+0

Vielen Dank. Ich habe hinzugefügt: --add-drop-database --databases weil der create database -Befehl wurde nicht nur mit add-drop-database – pgee70

+1

Nach dem Kopieren der tablename.frm, stellen Sie sicher, dass die Datei verfügt über die entsprechenden Berechtigungen und gehört für den Benutzer: Gruppe, auf die von MySQL zugegriffen werden kann. – NEB

3

begegnete ich auch das Problem, während ein Schema löschen und wieder zu schaffen. Ich überwinde dieses Problem, indem ich C:\ProgramData\MySQL\MySQL Server 5.6\data\my_database_name gehe und die Tabellen lösche, die von der vorhergehenden Datenbankerschaffung blieben. Sie können auch die gesamte Datenbank löschen, wenn Sie möchten.

0

wenn Sie XAMPP verwenden, dann zuerst ("Stop") MySQL dann nach C gehen: \ xampp \ mysql \ data \ dnb wo in meinem Fall dnb Namen meiner Datenbank-Ordner ist. also dann öffnen Sie es und löschen Sie .IBD-Datei daher können Sie nur löschen, wenn Sie bereits MYSQL stoppen. dann gehen Sie zu phpmyadmin 1 klicken Sie auf phpmyadmin. 2 klicken Sie auf Datenbanken, die unten angezeigt werden (Server.127.0.0.1 in Ihrem Fall meine Änderung sein) 3 dann überprüfen Sie 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. here you can see how you drop database from phpmyadmin

6

Ich fand den einfachsten Weg, um dieses Problem zu überspringen, war es, phpmyadmin Datenbank-Dump manuell zu bearbeiten und bearbeiten/ändern Sie die Tabelle, die Probleme auf etwas anderes als INNODB hatte. Ich änderte die Problemtabelle zu ENGINE=MyISAM und voila. Import hat 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 ; 
+1

Bitte denken Sie daran, Ihre Antwort neu zu formatieren. – aggsol

+0

von allen Empfehlungen hier, das ist die Lösung, die für mich gearbeitet hat. –

Verwandte Themen