ฉันเพิ่งซื้อเดสก์ท็อปที่บ้านใหม่ ฉันมีฐานข้อมูล MySQL สามฐานข้อมูลที่ฉันต้องการย้ายข้ามไป ฉันทิ้งทั้งหมดโดยใช้ mysqldump ก่อนถอดไดรฟ์ออกจากเครื่องเก่า
การกู้คืนฐานข้อมูลที่ใหญ่ที่สุดนั้นใช้เวลานาน (ใช้เวลาถึง 24 ชั่วโมง) ฉันกำลังกู้คืนผ่าน:
mysql -uxxxx -p
ป้อนรหัสผ่าน: yyyy
mysql> สร้างฐานข้อมูล foo;
mysql> ใช้ foo;
mysql> เริ่มการทำธุรกรรม;
มายเอสคิวแอล> \ <ดัมพ์ไฟล์>
ฉันภาวนาให้ฉันจำ ให้สัญญา
เมื่อสิ่งนี้เสร็จสิ้น!
ฉันละทิ้งความพยายามในการกู้คืนครั้งแรกโดยไม่มีการทำธุรกรรมเนื่องจากใช้เวลานานมากฉันตั้งใจที่จะไม่ยุ่งกับการทำธุรกรรมเมื่อกู้คืนฐานข้อมูลอีกสองฐานข้อมูลเนื่องจากดูเหมือนว่าจะไม่สร้างความแตกต่าง
มีอะไรที่ฉันสามารถทำได้เพื่อเร่งการคืนค่าหรือไม่ ฉันควรทำการสำรองข้อมูลแตกต่างกันหรือไม่ - ฉันเพิ่งใช้วานิลลา mysqldump
บรรทัดคำสั่งด้วย --skip-คอลัมน์-สถิติ
เนื่องจากการถ่ายโอนข้อมูลจะล้มเหลวตามที่เสนอใน คำตอบ stackoverflow นี้.
สำหรับการอ้างอิง เครื่องใหม่รัน Windows 10 และ MySQL 8.0.25 Community; เครื่องเก่ารัน Windows 7 และ MySQL 5.6.22
เมื่อดูที่ไฟล์ดัมพ์อย่างละเอียดมากขึ้น (เพื่อค้นหาเวอร์ชันเซิร์ฟเวอร์) ฉันเห็นว่าตารางถูกสร้างขึ้นด้วยดัชนีของพวกเขา ตามด้วยคำสั่ง INSERT INTO จำนวนมาก ดูเหมือนจะไม่ฉลาดเป็นพิเศษ มีวิธีชักจูง mysqldump
เพื่อสร้างสคริปต์ที่:
- สร้างตารางโดยไม่มีดัชนี
- แทรกแถว แล้ว
- สร้างดัชนี
ซึ่งดูเหมือนจะเป็นวิธีที่ดีกว่าเมื่อฐานข้อมูลกำลังถูกกู้คืน (น่าแปลกใจเล็กน้อยที่นี่ไม่ใช่ค่าเริ่มต้น!) ฉันคิดว่านี่เป็นไปได้กับ MySQL - ฉันใช้ SQLLite มา 3 ปีแล้วและเป็นไปได้อย่างแน่นอน
อัปเดต
คำถามนี้ไม่ใช่ อย่างสมบูรณ์ ตอบโดย ฉันจะเร่งความเร็วการกู้คืน MySQL จากไฟล์ดัมพ์ได้อย่างไรเนื่องจากคำถามนั้นอ้างถึงตาราง MyISAM โดยเฉพาะ และของฉันคือ InnoDB (ขออภัย ฉันน่าจะพูดถึงเครื่องมือจัดเก็บข้อมูลในคำถามเดิมของฉัน)
อย่างไรก็ตาม คำตอบนั้นกระตุ้นและแจ้งความพยายามของฉันในการแก้ไขปัญหา ซึ่งฉันได้บันทึกไว้ในคำตอบของฉันเองด้านล่าง