Błąd podczas importowania zrzutu SQL do MySQL: nieznana baza danych / nie można utworzyć bazy danych

84

Nie wiem, jak zaimportować plik zrzutu SQL. Nie mogę zaimportować bazy danych bez jej utworzenia w MySQL.

Oto błąd wyświetlany, gdy database_namenie został jeszcze utworzony:

username= nazwa użytkownika osoby mającej dostęp do bazy danych na oryginalnym serwerze.
database_name= nazwa bazy danych z oryginalnego serwera

$ mysql -u username -p -h localhost database_name < dumpfile.sql   
Enter password:  
ERROR 1049 (42000): Unknown database 'database_name' 

Jeśli zaloguję się do MySQL jako root i utworzę bazę danych, database_name

mysql -u root  
create database database_name;  
create user username;# same username as the user from the database I got the dump from.  
grant all privileges on database_name.* to username@"localhost" identified by 'password';  
exit mysql

następnie spróbuj ponownie zaimportować zrzut sql:

$ mysql -u username -p database_name < dumpfile.sql  
Enter password:  
ERROR 1007 (HY000) at line 21: Can't create database 'database_name'; database exists

Jak mam zaimportować plik zrzutu SQL?

BryanWheelock
źródło

Odpowiedzi:

39

Otwórz plik sql i zakomentuj wiersz, który próbuje utworzyć istniejącą bazę danych.

Bjorn
źródło
8
@BryanWheelock Myślę, że lepszą opcją (możliwą do uprzemysłowienia) byłoby nie wybieranie bazy danych w poleceniu, więc wygląda to następująco: „mysql -u nazwa_użytkownika -p -h localhost <dumpfile.sql”. Nazwa_bazy_danych jest opcjonalnym parametrem. Jeśli twój plik zrzutu zawiera instrukcję "utwórz bazę danych", to zostanie ona utworzona.
toni07
Żeby to trochę rozwinąć, w pierwszej linii w moim pliku * .sql było to: CREATE DATABASE JEŚLI NIE ISTNIEJE `nazwa_bazy_danych` / *! 40100 DEFAULT CHARACTER SET latin1 * /; Zmieniając to na (uwaga / * na początku): / * CREATE DATABASE JEŚLI NIE ISTNIEJE `nazwa_bazy_danych` / *! 40100 DEFAULT CHARACTER SET latin1 * /; skutecznie komentuje polecenie, a IMPORT powinien działać. Pamiętaj tylko, aby być aktywnym w bazie danych, do której IMPORT ma wstawić tabele, w przeciwnym razie możesz wpaść w bałagan!
ntk4
49

To znany błąd w MySQL.

błąd 42996 błąd 40477

Jak widać, był to znany problem od 2008 roku i jeszcze go nie naprawiono !!!

PRACA WOKÓŁ
Najpierw musisz utworzyć bazę danych do importu. Nie potrzebuje żadnych tabel. Następnie możesz zaimportować swoją bazę danych.

  1. najpierw uruchom linię poleceń MySQL (zastosuj nazwę użytkownika i hasło, jeśli potrzebujesz)
    C:\>mysql -u user -p

  2. Utwórz bazę danych i zakończ

    mysql> DROP DATABASE database;  
    mysql> CREATE DATABASE database;  
    mysql> Exit  
    
  3. Zaimportuj wybraną bazę danych z pliku zrzutu
    C:\>mysql -u user -p -h localhost -D database -o < dumpfile.sql

Możesz zastąpić localhost adresem IP lub domeną dowolnego serwera MySQL, do którego chcesz importować. Powodem polecenia DROP w zachęcie mysql jest upewnienie się, że zaczynamy od pustej i czystej bazy danych.

Max Kielland
źródło
2
Doceniam odpowiedź. Teraz jest rok 2012 i wygląda na to, że błąd nadal istnieje, ponieważ użyłem Twojej odpowiedzi, aby przywrócić moją bazę danych Wordpress na nowy serwer (zauważ jednak, że w poleceniach MySQL brakuje końcówki ';'. ;-)
Karl
12

Wygląda na to, że zrzut bazy danych zawiera informacje potrzebne do utworzenia bazy danych. Więc nie podawaj linii poleceń MySQL nazwy bazy danych. Utworzy nową bazę danych i przełączy się do niej, aby wykonać import.

Paul Tomblin
źródło
4

Jeśli tworzysz bazę danych w direct admin lub cpanel, musisz edytować swój sql za pomocą notatnika lub notepad ++ i zmienić CREATE DATABASEpolecenie na CREATE DATABASE IF NOT EXISTSw linii 22

MaysaM
źródło
0

Bazę danych tworzę samodzielnie za pomocą wiersza poleceń. Następnie spróbuj ponownie zaimportować, działa.

wmlhust
źródło