Lỗi khi nhập kết xuất SQL vào MySQL: Cơ sở dữ liệu không xác định / Không thể tạo cơ sở dữ liệu


84

Tôi bối rối về cách nhập tệp kết xuất SQL. Tôi dường như không thể nhập cơ sở dữ liệu mà không tạo cơ sở dữ liệu trước trong MySQL.

Đây là lỗi hiển thị khi database_namechưa được tạo:

username= tên người dùng của ai đó có quyền truy cập vào cơ sở dữ liệu trên máy chủ gốc.
database_name= tên cơ sở dữ liệu từ máy chủ gốc

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

Nếu tôi đăng nhập vào MySQL dưới dạng root và tạo cơ sở dữ liệu, 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

sau đó cố gắng nhập lại kết xuất 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

Làm cách nào để nhập tệp kết xuất SQL?

Câu trả lời:


39

Mở tệp sql và nhận xét dòng cố gắng tạo cơ sở dữ liệu hiện có.


8
@BryanWheelock Tôi nghĩ một tùy chọn tốt hơn (có thể công nghiệp hóa) sẽ là không chọn cơ sở dữ liệu trong lệnh của bạn, vì vậy nó sẽ trở thành: "mysql -u username -p -h localhost <dumpfile.sql". Database_name là một tham số tùy chọn. Nếu tệp kết xuất của bạn chứa hướng dẫn "tạo cơ sở dữ liệu", thì nó sẽ được tạo.
toni07

Chỉ cần giải thích thêm về vấn đề này một chút, dòng đầu tiên trong tệp * .sql của tôi có dòng này: TẠO CƠ SỞ DỮ LIỆU NẾU KHÔNG TỒN TẠI `database_name` / *! 40100 DEFAULT CHARACTER SET latin1 * /; Thay đổi điều này thành (ghi chú / * khi bắt đầu): / * TẠO CƠ SỞ DỮ LIỆU NẾU KHÔNG TỒN TẠI `database_name` / *! 40100 DEFAULT CHARACTER SET latin1 * /; nhận xét hiệu quả lệnh và IMPORT sẽ hoạt động. Chỉ cần nhớ hoạt động bên trong cơ sở dữ liệu mà bạn muốn IMPORT chèn các bảng vào, nếu không, bạn có thể gặp rắc rối!
ntk4

49

Đây là một lỗi đã biết ở MySQL.

lỗi 42996
lỗi 40477

Như bạn có thể thấy, đây là một vấn đề được biết đến từ năm 2008 và họ vẫn chưa sửa nó !!!

CƠ SỞ LÀM VIỆC
Trước tiên bạn cần tạo cơ sở dữ liệu để nhập. Nó không cần bất kỳ bảng nào. Sau đó, bạn có thể nhập cơ sở dữ liệu của mình.

  1. trước tiên hãy bắt đầu dòng lệnh MySQL của bạn (áp dụng tên người dùng và mật khẩu nếu bạn cần)
    C:\>mysql -u user -p

  2. Tạo cơ sở dữ liệu của bạn và thoát

    mysql> DROP DATABASE database;  
    mysql> CREATE DATABASE database;  
    mysql> Exit  
    
  3. Nhập cơ sở dữ liệu đã chọn của bạn từ tệp kết xuất
    C:\>mysql -u user -p -h localhost -D database -o < dumpfile.sql

Bạn có thể thay thế localhost bằng IP hoặc miền cho bất kỳ máy chủ MySQL nào bạn muốn nhập vào. Lý do cho lệnh DROP trong dấu nhắc mysql là để đảm bảo chúng ta bắt đầu với một cơ sở dữ liệu trống và sạch.


2
Tôi đánh giá cao câu trả lời. Bây giờ là năm 2012 và có vẻ như lỗi vẫn còn đó, vì tôi đã sử dụng câu trả lời của bạn để khôi phục kho dữ liệu wordpress của tôi vào máy chủ mới (tuy nhiên, lưu ý rằng phần khen ngợi MySQL của bạn thiếu phần cuối ';'. ;-)
Karl

12

Có vẻ như kết xuất cơ sở dữ liệu của bạn bao gồm thông tin để tạo cơ sở dữ liệu. Vì vậy, đừng đặt tên cơ sở dữ liệu cho dòng lệnh MySQL. Nó sẽ tạo cơ sở dữ liệu mới và chuyển sang nó để thực hiện việc nhập.


4

Nếu bạn tạo cơ sở dữ liệu của mình trong quản trị viên trực tiếp hoặc bảng điều khiển, bạn phải chỉnh sửa sql của mình bằng notepad hoặc notepad ++ và thay đổi CREATE DATABASElệnh thành CREATE DATABASE IF NOT EXISTStrong dòng22


0

Tôi tự tạo cơ sở dữ liệu bằng dòng lệnh. Sau đó, hãy thử nhập lại, nó hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.