ฉันจะเรียกคืนไฟล์ดัมพ์จาก mysqldump ได้อย่างไร


544

ฉันได้รับไฟล์ฐานข้อมูล MySQL ที่ฉันต้องการคืนค่าเป็นฐานข้อมูลในเครื่อง Windows Server 2008 ของฉัน

ฉันพยายามใช้ผู้ดูแลระบบ MySQL แต่ฉันพบข้อผิดพลาดต่อไปนี้:

ไฟล์ที่เลือกสร้างโดย mysqldump และไม่สามารถกู้คืนได้โดยแอปพลิเคชันนี้

ฉันจะทำงานนี้ได้อย่างไร

คำตอบ:


587

มันควรจะง่ายเหมือนการรันสิ่งนี้:

mysql -u <user> -p < db_backup.dump

หากการถ่ายโอนข้อมูลเป็นฐานข้อมูลเดียวคุณอาจต้องเพิ่มบรรทัดที่ด้านบนของไฟล์:

USE <database-name-here>;

หากเป็นดัมพ์ของฐานข้อมูลจำนวนมากข้อความสั่งการใช้จะมีอยู่แล้วในนั้น

ในการเรียกใช้คำสั่งเหล่านี้ให้เปิดพรอมต์คำสั่ง (ใน Windows) และcdไปยังไดเรกทอรีที่mysql.exeสามารถเรียกใช้งานได้ (คุณอาจต้องมองไปรอบ ๆ เล็กน้อยมันจะขึ้นอยู่กับวิธีที่คุณติดตั้ง mysql เช่นสแตนด์อโลนหรือเป็นส่วนหนึ่งของ แพคเกจเช่น WAMP) เมื่อคุณอยู่ในไดเรกทอรีนั้นคุณควรจะสามารถพิมพ์คำสั่งตามที่มีอยู่ด้านบนได้


1
ฉันจะใช้ "MySQL Command Line Client" หรือไม่? ฉันไม่เคยใช้ MySQL มาก่อน
Zack Peterson

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

6
แน่นอนว่าฐานข้อมูลที่คุณใส่ในคำสั่ง "using" จะต้องมีอยู่ก่อน
Justin Bennett

112
ดูคำตอบ vogs ไวยากรณ์ mysql -u<user> -p mydatabasename < db_backup.dump ไม่จำเป็นต้องมีUSEคำสั่งที่จุดเริ่มต้นของไฟล์
Toskan

1
คำแนะนำ "เปิดไฟล์ดัมพ์ในตัวแก้ไขข้อความ" ดูแปลก ๆ ที่อาจทำงานกับฐานข้อมูลขนาดเล็กหรือแก้ไขข้อความบัฟเฟอร์เช่น EditPad แต่ทุกอย่างอื่นมันจะทำให้หายใจไม่ออก มันจะดีถ้าคุณไม่ต้องทำตามขั้นตอนนี้
mikato

718

หากฐานข้อมูลที่คุณต้องการกู้คืนไม่มีอยู่คุณต้องสร้างฐานข้อมูลก่อน

บนบรรทัดรับคำสั่งหากคุณอยู่ในไดเรกทอรีเดียวกันกับไฟล์ที่ถูกทิ้งให้ใช้คำสั่งเหล่านี้ (พร้อมการแทนที่ที่เหมาะสม):

C:\> mysql -u root -p

mysql> create database mydb;
mysql> use mydb;
mysql> source db_backup.dump;

52
ฉันชอบวิธีนี้เป็นการส่วนตัว มันแสดงให้เห็นถึงความคืบหน้าของการถ่ายโอนข้อมูลและเวลาที่แตกต่างกันของ SQL
ToughPal

11
@Phrogz จริงๆแล้วคุณสามารถระบุรหัสผ่านในบรรทัดคำสั่งโดยใช้mysql -u root -psecret ที่ว่าง แต่มีข้อเสียที่รหัสผ่านของคุณจะแสดงในข้อความธรรมดาในรายการกระบวนการและไฟล์บันทึก จะเป็นการดีกว่าที่คุณแนะนำให้ใช้ว่าง-pและพิมพ์ลงในพรอมต์
Joe Holloway

วิธีนี้มีประโยชน์ในการอนุญาตให้ตั้งค่าตัวแปรตามเซสชัน (เช่น FOREIGN_KEY_CHECKS) โดยไม่ต้องแก้ไขไฟล์ดัมพ์
Chris Cooper

นี่เป็นสิ่งที่ดีและยอดเยี่ยมเมื่อทำสิ่งนี้ด้วยมือ แต่ไม่ได้ผลจากสคริปต์ทุบตี
chacham15

1
คืนหนึ่ง: มันไม่สามารถโหลดการถ่ายโอนข้อมูลบีบอัด (เช่นสร้างขึ้นด้วยmysqldump db | gzip -9 > dumpfile.sql.gz)
Marinos

246

คุณเพียงแค่เรียกใช้สิ่งนี้:

mysql -p -u[user] [database] < db_backup.dump

หากดัมพ์มีหลายฐานข้อมูลคุณควรละเว้นชื่อฐานข้อมูล:

mysql -p -u[user] < db_backup.dump

ในการเรียกใช้คำสั่งเหล่านี้ให้เปิดพรอมต์คำสั่ง (ใน Windows) และcdไปยังไดเรกทอรีที่mysql.exeสามารถเรียกใช้งานได้ (คุณอาจต้องมองไปรอบ ๆ เล็กน้อยมันจะขึ้นอยู่กับวิธีที่คุณติดตั้ง mysql เช่นสแตนด์อโลนหรือเป็นส่วนหนึ่งของ แพคเกจเช่น WAMP) เมื่อคุณอยู่ในไดเรกทอรีนั้นคุณควรจะสามารถพิมพ์คำสั่งได้



33

เมื่อเราสร้างไฟล์ดัมพ์mysqldumpสิ่งที่มีอยู่นั้นเป็นสคริปต์ SQL ตัวใหญ่สำหรับสร้างเนื้อหา databse ขึ้นมาใหม่ ดังนั้นเราจึงคืนค่าโดยใช้การเริ่มต้นไคลเอนต์บรรทัดคำสั่งของ MySQL:

mysql -uroot -p 

(ซึ่งrootเป็นชื่อผู้ใช้ผู้ดูแลระบบของเราสำหรับ MySQL) และเมื่อเชื่อมต่อกับฐานข้อมูลแล้วเราต้องการคำสั่งในการสร้างฐานข้อมูลและอ่านไฟล์ใน:

create database new_db;
use new_db;
\. dumpfile.sql

รายละเอียดจะแตกต่างกันไปตามตัวเลือกที่ใช้เมื่อสร้างไฟล์ดัมพ์


19

รันคำสั่งเพื่อป้อนลงใน DB

 # mysql -u root -p 

ป้อนรหัสผ่านสำหรับผู้ใช้จากนั้นสร้างฐานข้อมูลใหม่

mysql> create database MynewDB;
mysql> exit

และให้ออกจากนั้นลองใช้คำสั่งนี้

# mysql -u root -p  MynewDB < MynewDB.sql

จากนั้นป้อน db และประเภท

mysql> show databases;
mysql> use MynewDB;
mysql> show tables;
mysql> exit

นั่นมัน ........ การถ่ายโอนข้อมูลของคุณจะถูกกู้คืนจากฐานข้อมูลหนึ่งไปยังฐานข้อมูลอื่น

มิฉะนั้นจะมีวิธีสำรองสำหรับการกู้คืนการถ่ายโอนข้อมูล

# mysql -u root -p 

จากนั้นป้อน db และประเภท

mysql> create database MynewDB;
mysql> show databases;
mysql> use MynewDB;
mysql> source MynewDB.sql;
mysql> show tables;
mysql> exit

14

ฉันได้มันไปทำงานตามขั้นตอนเหล่านี้ ...

  1. เปิดผู้ดูแลระบบ MySQL และเชื่อมต่อกับเซิร์ฟเวอร์

  2. เลือก "แคตตาล็อก" ทางด้านซ้าย

  3. คลิกขวาในช่องซ้ายล่างและเลือก "สร้างสคีมาใหม่"

    ผู้ดูแลระบบ MySQL http://img204.imageshack.us/img204/7528/adminsx9.th.gif ขยายภาพ

  4. ตั้งชื่อสคีมาใหม่ (ตัวอย่าง: "dbn")

    MySQL Schema ใหม่ http://img262.imageshack.us/img262/4374/newwa4.th.gif ขยายภาพ

  5. เปิดพรอมต์คำสั่งของ Windows (cmd)

    พรอมต์คำสั่งของ Windows http://img206.imageshack.us/img206/941/startef7.th.gif ขยายภาพ

  6. เปลี่ยนไดเรกทอรีเป็นโฟลเดอร์การติดตั้ง MySQL

  7. ดำเนินการคำสั่ง:

    mysql -u root -p dbn < C:\dbn_20080912.dump

    …โดยที่ "root" เป็นชื่อของผู้ใช้ "dbn" เป็นชื่อฐานข้อมูลและ "C: \ dbn_20080912.dump" คือพา ธ / ชื่อไฟล์ของไฟล์ mysqldump .dump

    บรรทัดคำสั่งการถ่ายโอนข้อมูล MySQL คืนค่า http://img388.imageshack.us/img388/2489/cmdjx0.th.gif ขยายภาพ

  8. สนุก!



11

หากคุณต้องการดูความคืบหน้าของการถ่ายโอนข้อมูลลองสิ่งนี้:

pv -i 1 -p -t -e /path/to/sql/dump | mysql -u USERNAME -p DATABASE_NAME

แน่นอนคุณต้องติดตั้ง 'pv' คำสั่งนี้ใช้งานได้ใน * nix เท่านั้น


10

เป็นตัวอย่างเฉพาะของคำตอบก่อนหน้า:

ฉันต้องการคืนค่าสำเนาสำรองเพื่อให้ฉันสามารถนำเข้า / ย้ายข้อมูลไปยัง SQL Server ฉันติดตั้ง MySql เท่านั้น แต่ไม่ได้ลงทะเบียนเป็นบริการหรือเพิ่มลงในเส้นทางของฉันเนื่องจากฉันไม่ต้องการให้มันทำงานต่อไป

ฉันใช้ windows explorer เพื่อวางไฟล์ดัมพ์ของฉันใน C: \ code \ dump.sql จากนั้นเปิด MySql จากรายการเมนูเริ่ม สร้าง DB จากนั้นรันคำสั่ง source ด้วยพา ธ แบบเต็มดังนี้:

mysql> create database temp
mysql> use temp
mysql> source c:\code\dump.sql

9

การใช้ไฟล์ดัมพ์ 200MB ที่สร้างขึ้นบน Linux เพื่อกู้คืนบน Windows ด้วย mysql 5.5 ทำให้ฉันประสบความสำเร็จมากขึ้น

source file.sql

วิธีการจาก mysql รวดเร็วกว่าด้วย

mysql  < file.sql

วิธีการในบรรทัดคำสั่งที่ทำให้เกิดข้อผิดพลาด 2006 "เซิร์ฟเวอร์หายไป" (บน windows)

แปลกบริการที่สร้างขึ้นระหว่างการติดตั้ง (mysql) หมายถึงไฟล์ my.ini ที่ไม่มีอยู่ ฉันคัดลอกไฟล์ตัวอย่าง "ใหญ่" ไปยัง my.ini ซึ่งฉันแก้ไขไปแล้วพร้อมกับการเพิ่มที่แนะนำ

ค่านิยมของฉันคือ

[mysqld]
max_allowed_packet = 64M
interactive_timeout = 250
wait_timeout = 250

9
./mysql -u <username> -p <password> -h <host-name like localhost> <database-name> < db_dump-file

นี่เป็นคำตอบที่เหมือนกันสองสามข้อและนี่เป็นคำถามอายุแปดปี
miken32

2
แม้ว่าคำตอบที่เลือกนั้นดีมาก แต่คำตอบนี้มีประโยชน์สำหรับฉันมากกว่า ไฟล์ฐานข้อมูลของฉันมีขนาดใหญ่มากและการเปิดใน Notepad ++ เป็นฝันร้ายมันไม่สามารถจัดการกับขนาดได้และจะไม่อนุญาตให้ฉันเพิ่มชื่อฐานข้อมูลที่ด้านบนของไฟล์ sql ในกรณีใดความสามารถในการระบุชื่อ db จากบรรทัดคำสั่งจะมีประโยชน์มากกว่า
Najeeb

mysqlคำสั่งไม่รับช่องว่างระหว่างตัวเลือกและขัดแย้งของพวกเขา ต้องเป็น-u<username>รหัสผ่านและไม่ควรให้รหัสผ่านในบรรทัดคำสั่งเลย
Roland Illig

4

คุณไม่สามารถใช้เมนูกู้คืนในผู้ดูแลระบบ MySQL ได้หากไม่มีข้อมูลสำรอง / ดัมพ์ มันคุ้มค่ากับการยิง หากคุณเลือกที่จะ "เพิกเฉยข้อผิดพลาด" ด้วยช่องทำเครื่องหมายมันจะบอกว่ามันเสร็จสมบูรณ์แม้ว่ามันจะออกอย่างชัดเจนด้วยการนำเข้าเพียงเศษเสี้ยวของแถว ... นี่คือการถ่ายโอนข้อมูล


2

คำสั่งหนึ่งซับเพื่อกู้คืน SQL ที่สร้างขึ้นจาก mysqldump

mysql -u <username> -p<password> -e "source <path to sql file>;"

1
เช่นmysql -u root -p12345678 -e "source /tmp/backup.sql;"
Jossef Harush

อย่าใช้รหัสผ่านเช่นนี้เพียงแค่ใช้ -p และบรรทัดคำสั่งจะแจ้งให้คุณขอรหัสผ่านที่ปลอดภัยหลังจากที่คุณกด Enter
user2473015

เมื่อคุณสามารถให้พรอมต์โต้ตอบคุณถูกต้อง เมื่อคุณไม่สามารถ (เช่นสคริปต์แบบอัตโนมัติ) คุณอาจจะใช้มันแบบอินไลน์
Jossef Harush

1

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


0

วิธีการคืนค่าฐานข้อมูล MySQL ด้วย MySQLWorkbench

คุณสามารถเรียกใช้การปล่อยและสร้างคำสั่งในแท็บแบบสอบถาม

ปล่อยสคีมาหากมีอยู่ในปัจจุบัน

DROP DATABASE `your_db_name`;

สร้างสคีมาใหม่

CREATE SCHEMA `your_db_name`;

เปิดไฟล์ Dump ของคุณ

MySQLWorkbench เปิดไฟล์ sql

  1. คลิกเปิดสคริปต์ SQL ในไอคอนแท็บแบบสอบถามใหม่แล้วเลือกไฟล์ db dump ของคุณ
  2. จากนั้นคลิกเรียกใช้สคริปต์ SQL ...
  3. จากนั้นจะช่วยให้คุณดูตัวอย่างบรรทัดแรกของสคริปต์การถ่ายโอนข้อมูล SQL
  4. จากนั้นคุณจะเลือกชื่อสคีมาเริ่มต้น
  5. ถัดไปเลือกตัวอักษรเริ่มต้นชุด utf8 เป็นปกติเป็นเดิมพันที่ปลอดภัย แต่คุณอาจจะไม่สามารถที่จะมองเห็นได้จากการมองที่เส้นแสดงตัวอย่างบางอย่างเช่นcharacter_set
  6. คลิกเรียกใช้
  7. อดทนกับสคริปต์คืนค่าฐานข้อมูลขนาดใหญ่และดูเมื่อพื้นที่ไดรฟ์ของคุณละลายไป 🎉

0

สมมติว่าคุณได้สร้างฐานข้อมูลเปล่าแล้วคุณยังสามารถกู้คืนฐานข้อมูลจากบรรทัดคำสั่งดังนี้:

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