2013-07-29 9 views
19

biegam codziennie kopii zapasowej kopii zapasowej mysqldump bazy produkcyjnej (MySQL w wersji 5.1.66):problemy mysqldump z przywrócenia błąd: „Proszę WYRZUCIĆ tabel przed IMPORT”

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

ja też nie codziennie przywracanie że baza danych na moim komputerze rozwoju (mysql wersja 5.6.12)

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

pojawia się błąd: eRROR 1813 (HY000) w wierszu 25: tabel, tabela "databasename. tablename "istnieje. Prosimy ODRZUĆ tabelę przed IMPORTEM.

Moje odczyt wskazuje na to, ponieważ baza danych MySQL InnoDB wymaga polecenie:

ALTER TABLE tbl_name DISCARD TABLESPACE; 

zostać uruchomiony przed spadła tablica - wydaje się, że usunięcie tabeli nie jest wystarczająca, aby pozbyć się jej indeksy. (mój serwer programistyczny używa opcji innodb_file_per_table)

Nie chcę używać opcji "zamień", ponieważ potencjalnie mógłbym mieć dane w mojej bazie danych programowania, która została usunięta z produkcyjnej bazy danych.

btw po błędzie tabele są nieczytelne, ale ponowne uruchomienie mysqld naprawia je.

Pytanie brzmi, czy istnieje opcja zrzutu mysql, która pomoże rozwiązać ten problem, czy istnieje inny sposób importowania danych, które zapobiegną wystąpieniu błędu?

z góry dziękuję za przeczytanie.

Odpowiedz

38

Wygląda na to, że masz tablename.ibd, ale nie tablename.frm.

Aby sprawdzić:

  1. płyty CD na mysql katalogu danych następnie nazwę bazy danych.
    cd /var/lib/mysql/database_name
  2. Wyszukaj nazwę tabeli, która podaje błąd.

    ls tablename.*

    Powinieneś zobaczyć dwa pliki:

     
    tablename.ibd 
    tablename.frm 
    

    Ale zgaduję nie robić i tylko zobaczyć

    tablename.ibd

Aby rozwiązać masz kilka opcji:

  1. Dodaj następującą po mysqldump, co spowoduje atabase do upuszczenia, czyszczenie katalogu danych, przed przywróceniem.
    --add-drop-database
  2. Skopiuj plik tablename.frm z prod do wersji dev, a następnie wydaj instrukcję tabeli usuwania.

również:

  • Nie ma potrzeby korzystania net_buffer_length = 5000, kiedy jesteś dumping do pliku na localhost.
  • Inne rozwiązania do backupu - Percona Xtrabackup
+0

Dziękuję bardzo. Dodałem: --add-drop-database --bazy danych ponieważ polecenie create database nie zostało dodane z samą bazą danych add-drop – pgee70

+1

Po skopiowaniu pliku tablename.frm, upewnij się, że plik ma odpowiednie uprawnienia i należy do użytkownika: grupa, do której można uzyskać dostęp z mysql. – NEB

3

ja również napotkał ten problem podczas usuwania schematu i tworzenie go ponownie. Przezwyciężyłem ten problem, przechodząc C:\ProgramData\MySQL\MySQL Server 5.6\data\my_database_name i usuwając tabele, które pozostały z poprzedniego tworzenia bazy danych. Możesz także usunąć całą bazę danych, jeśli chcesz.

0

jeśli używasz XAMPP następnie pierwszy ("Stop") MySQL Następnie przejdź do katalogu C: \ xampp \ mysql \ data \ dnb gdzie w moim przypadku dnb jest mój folder nazwa bazy danych. , a następnie otwórz i usuń plik .ibd, dlatego możesz go usunąć tylko wtedy, gdy już przestajesz MYsql. następnie przejdź do phpmyadmin 1 kliknij na phpmyadmin. 2 kliknij na bazy danych, które pojawiają się poniżej (serwer.127.0.0.1 w twoim przypadku mój będzie to zmienić) 3 następnie sprawdź swoją bazę danych, którą chcesz upuścić, i kliknij przycisk upuść. 4 Następnie można utworzyć bazę danych o tej samej nazwie i pomyślnie zaimportować bazę danych. here you can see how you drop database from phpmyadmin

6

Znalazłem najłatwiejszy sposób na pomijanie tego problemu było ręczne edytowanie zrzutów bazy danych phpmyadmin i edycja/zmiana tabeli, która miała problemy z czymś innym niż INNODB. Zmieniłem tabelę problemów na ENGINE=MyISAM i voila. Import działa.

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

Proszę rozważyć ponowne sformatowanie odpowiedzi. – aggsol

+0

wszystkich zaleceń tutaj, to jest rozwiązanie, które zadziałało dla mnie. –