SQL 덤프를 MySQL로 가져 오는 중 오류 : 알 수없는 데이터베이스 / 데이터베이스를 만들 수 없음


84

SQL 덤프 파일을 가져 오는 방법이 혼란 스럽습니다. MySQL에서 먼저 데이터베이스를 생성하지 않고는 데이터베이스를 가져올 수 없습니다.

database_name아직 생성되지 않은 경우 표시되는 오류 입니다.

username= 원래 서버의 데이터베이스에 액세스 할 수있는 사용자의 사용자 이름.
database_name= 원래 서버의 데이터베이스 이름

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

MySQL에 루트로 로그인하고 데이터베이스를 생성하면 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

그런 다음 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

SQL 덤프 파일을 어떻게 가져와야합니까?

답변:


39

SQL 파일을 열고 기존 데이터베이스를 만들려고하는 줄을 주석 처리합니다.


8
@BryanWheelock 더 나은 (산업화 가능한) 옵션은 명령에서 데이터베이스를 선택하지 않는 것이므로 "mysql -u username -p -h localhost <dumpfile.sql"이됩니다. database_name은 선택적 매개 변수입니다. 덤프 파일에 "데이터베이스 생성"명령이 포함되어 있으면 생성됩니다.
toni07 2015 년

이것에 대해 조금 더 자세히 설명하기 위해 내 * .sql 파일의 첫 번째 줄에 다음이 포함되어 있습니다. CREATE DATABASE IF NOT EXISTS`database_name` / *! 40100 DEFAULT CHARACTER SET latin1 * /; 이것을 (시작시 / * 참고) : / * CREATE DATABASE IF NOT EXISTS`database_name` / *! 40100 DEFAULT CHARACTER SET latin1 * /; 명령을 효과적으로 주석 처리하면 IMPORT가 작동합니다. IMPORT가 테이블을 삽입하기를 원하는 데이터베이스 내부에서 활동하는 것을 기억하십시오. 그렇지 않으면 혼란에 빠질 수 있습니다!
ntk4

49

이것은 MySQL 의 알려진 버그 입니다.

버그 42996
버그 40477

보시다시피 이것은 2008 년 이후로 알려진 문제이며 아직 수정하지 않았습니다 !!!

피드백 보내기 해결 과정
먼저 가져올 데이터베이스를 만들어야합니다. 테이블이 필요하지 않습니다. 그런 다음 데이터베이스를 가져올 수 있습니다.

  1. 먼저 MySQL 명령 줄을 시작합니다 (필요한 경우 사용자 이름과 암호 적용).
    C:\>mysql -u user -p

  2. 데이터베이스를 만들고 종료

    mysql> DROP DATABASE database;  
    mysql> CREATE DATABASE database;  
    mysql> Exit  
    
  3. 덤프 파일에서 선택한 데이터베이스 가져 오기
    C:\>mysql -u user -p -h localhost -D database -o < dumpfile.sql

localhost를 가져 오려는 MySQL 서버의 IP 또는 도메인으로 바꿀 수 있습니다. mysql 프롬프트에서 DROP 명령을 사용하는 이유는 비어 있고 깨끗한 데이터베이스로 시작해야하기 때문입니다.


2
대답 해 주셔서 감사합니다. 이제 2012 년이고 버그가 여전히 존재하는 것으로 보입니다. 귀하의 답변을 사용하여 내 워드 프레스 데이터를 새 서버로 복원하기 위해 사용했습니다 (그러나 MySQL 추천에는 ';'결말이 없습니다. ;-)
Karl

12

데이터베이스 덤프에 데이터베이스 생성 정보가 포함 된 것 같습니다. 따라서 MySQL 명령 줄에 데이터베이스 이름을 지정하지 마십시오. 새 데이터베이스를 만들고 가져 오기를 수행하도록 전환합니다.


4

direct admin 또는 cpanel에서 데이터베이스를 생성하는 경우 notepad 또는 notepad ++로 SQL을 편집 하고 line22에서 CREATE DATABASE명령을 변경 CREATE DATABASE IF NOT EXISTS해야합니다.


0

명령 줄을 사용하여 직접 데이터베이스를 만듭니다. 그런 다음 다시 가져 오면 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.