เกิดข้อผิดพลาดในการนำเข้าดัมพ์ 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 Dumpfile ได้อย่างไร

คำตอบ:


39

เปิดไฟล์ sql และแสดงความคิดเห็นในบรรทัดที่พยายามสร้างฐานข้อมูลที่มีอยู่


8
@BryanWheelock ฉันคิดว่าตัวเลือกที่ดีกว่า (แบบอุตสาหกรรม) จะไม่เลือกฐานข้อมูลในคำสั่งของคุณดังนั้นจึงกลายเป็น: "mysql -u username -p -h localhost <dumpfile.sql" database_name เป็นพารามิเตอร์ทางเลือก หากไฟล์ดัมพ์ของคุณมีคำสั่ง "สร้างฐานข้อมูล" ไฟล์นั้นจะถูกสร้างขึ้น
toni07

เพียงเพื่ออธิบายรายละเอียดเล็กน้อยบรรทัดแรกในไฟล์ * .sql ของฉันมีสิ่งนี้อยู่: สร้างฐานข้อมูลหากไม่มีอยู่ `database_name` / *! 40100 DEFAULT CHARACTER SET latin1 * /; การเปลี่ยนสิ่งนี้เป็น (หมายเหตุ / * เมื่อเริ่มต้น): / * สร้างฐานข้อมูลหากไม่มีอยู่ `database_name` / *! 40100 DEFAULT CHARACTER SET latin1 * /; แสดงความคิดเห็นอย่างมีประสิทธิภาพคำสั่งและการนำเข้าควรใช้งานได้ อย่าลืมใช้งานในฐานข้อมูลที่คุณต้องการให้ IMPORT แทรกตารางลงไปไม่เช่นนั้นคุณอาจยุ่ง!
ntk4

49

นี่เป็นข้อบกพร่องที่ทราบแล้วที่ MySQL

ข้อผิดพลาด 42996
ข้อผิดพลาด 40477

อย่างที่คุณเห็นปัญหานี้เป็นปัญหาที่ทราบมาตั้งแต่ปี 2551 และยังไม่ได้รับการแก้ไข !!!

WORK AROUND
ก่อนอื่นคุณต้องสร้างฐานข้อมูลเพื่อนำเข้า ไม่จำเป็นต้องมีตารางใด ๆ จากนั้นคุณสามารถนำเข้าฐานข้อมูลของคุณ

  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 ด้วย IP หรือโดเมนสำหรับเซิร์ฟเวอร์ MySQL ที่คุณต้องการนำเข้า เหตุผลของคำสั่ง DROP ในพรอมต์ mysql คือต้องแน่ใจว่าเราเริ่มต้นด้วยฐานข้อมูลที่ว่างเปล่าและสะอาด


2
ฉันขอขอบคุณคำตอบ ตอนนี้เป็นปี 2012 และดูเหมือนว่าข้อบกพร่องยังอยู่ที่นั่นเพราะฉันใช้คำตอบของคุณเพื่อเรียกคืนฐานข้อมูล wordpress ของฉันไปยังเซิร์ฟเวอร์ใหม่ (โปรดทราบว่า MySQL ของคุณยกย่องว่าไม่มีตอนจบ ";" ;-)
Karl

12

ดูเหมือนการถ่ายโอนข้อมูลฐานข้อมูลของคุณจะมีข้อมูลสำหรับการสร้างฐานข้อมูล ดังนั้นอย่าตั้งชื่อฐานข้อมูลให้กับบรรทัดคำสั่ง MySQL มันจะสร้างฐานข้อมูลใหม่และเปลี่ยนไปใช้เพื่อทำการอิมพอร์ต


4

หากคุณสร้างฐานข้อมูลของคุณในผู้ดูแลระบบโดยตรงหรือ cpanel คุณต้องแก้ไข sql ของคุณด้วย notepad หรือ notepad ++ และเปลี่ยนCREATE DATABASEคำสั่งเป็นCREATE DATABASE IF NOT EXISTSในบรรทัดที่ 22


0

ฉันสร้างฐานข้อมูลด้วยตัวเองโดยใช้บรรทัดคำสั่ง จากนั้นลองนำเข้าอีกครั้งก็ใช้งานได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.