กู้คืนฐานข้อมูล MySQL จากโฟลเดอร์ข้อมูลโดยไม่มี ibdata1 จากไฟล์ ibd


15

ไดเรกทอรี WAMP ของฉันถูกลบโดยผู้ใช้รายอื่นโดยไม่ตั้งใจ มีโฟลเดอร์ข้อมูลเฉพาะใน MySQL เท่านั้น และในโฟลเดอร์ฐานข้อมูลเท่านั้น (โฟลเดอร์ใน "\ bin \ mysql \ mysql5.6.12 \ data \" ที่มีชื่อฐานข้อมูล) จะพร้อมใช้งาน ไฟล์ทั้งหมดรวมถึง " ibdata1 " ที่อยู่ในรูทของ "\ bin \ mysql \ mysql5.6.12 \ data \" จะถูกลบเช่นกัน

โฟลเดอร์ฐานข้อมูลมีไฟล์ที่มีนามสกุลด้านล่างเท่านั้น

* .frm, * .ibd

และไฟล์ "db.opt"

วิธีการกู้คืนฐานข้อมูล

ฉันได้ลองกู้ bdata1 แล้ว แต่ไม่สามารถรับกลับคืนมาได้ และบางฐานข้อมูลก็มี MYISAM ด้วย

คำตอบ:


16

MyISAM

สำหรับตาราง MyISAM mydb.mytable คุณควรมีสามไฟล์

  • \bin\mysql\mysql5.6.12\data\mydb\mytable.frm
  • \bin\mysql\mysql5.6.12\data\mydb\mytable.MYD
  • \bin\mysql\mysql5.6.12\data\mydb\mytable.MYI

พวกเขาควรจะสามารถเข้าถึงได้เป็นตารางเนื่องจากแต่ละไฟล์มีข้อมูลเมตาดาต้าและดัชนีที่ต้องการ เรียกรวมกันเป็นตาราง ไม่มีกลไกหน่วยเก็บข้อมูลภายนอกที่จะเข้าถึง

InnoDB

ดูภาพการเป็นตัวแทนของ InnoDB

สถาปัตยกรรม InnoDB

สิ่งเดียวที่แนบ ibdata1 กับ.ibdไฟล์คือพจนานุกรมข้อมูล

ภารกิจของคุณหากคุณตัดสินใจที่จะยอมรับมันคือการสร้างแต่ละตารางและสลับใน .ibd

ก่อนที่คุณจะทำอะไรให้ทำสำเนา "\ bin \ mysql \ mysql5.6.12 \ data" ทั้งหมดไว้ที่อื่น

นี่คือตัวอย่าง

สมมติว่าคุณมีฐานข้อมูลที่มีตารางmydb mytableซึ่งหมายความว่า

  • คุณมีโฟลเดอร์ \bin\mysql\mysql5.6.12\data\mydb
  • ภายในโฟลเดอร์นั้นคุณมี
    • mytable.frm
    • mytable.ibd

.frmคุณจำเป็นต้องมี หากคุณดูที่โพสต์ของฉันจะแยกสคีมาตารางจากไฟล์. frm ได้อย่างไร คุณสามารถดาวน์โหลดยูทิลิตี้ MySQL ที่สามารถสร้าง SQL ที่จำเป็นในการสร้างตาราง

ตอนนี้คุณควรทำดังต่อไปนี้

  • ย้ายmytable.ibdไปที่\bin\mysql\mysql5.6.12\data
  • เรียกใช้ SQL เพื่อสร้างตาราง InnoDB
  • เข้าสู่ระบบ mysql และเรียกใช้ALTER TABLE mydb.mytable DISCARD TABLESPACE;(จะลบ\bin\mysql\mysql5.6.12\data\mydb\mytable.ibd)
  • คัดลอก\bin\mysql\mysql5.6.12\data\mytable.ibdลงใน\bin\mysql\mysql5.6.12\data\mydb
  • ลงชื่อเข้าใช้ mysql และเรียกใช้ALTER TABLE mydb.mytable IMPORT TABLESPACE;(สิ่งนี้จะลงทะเบียน\bin\mysql\mysql5.6.12\data\mydb\mytable.ibdในพจนานุกรมข้อมูล)

หลังจากนี้ตารางmydb.mytableควรจะสามารถเข้าถึงได้อย่างเต็มที่ คุณสามารถทดสอบการช่วยสำหรับการเข้าถึงนั้นเพียงแค่เรียกใช้:

SELECT * FROM mydb.mytable LIMIT 10;

ให้มันลอง !!!

DRINK (การกู้คืนข้อมูลมีความรู้ที่จำเป็น) รับผิดชอบ


เพื่อให้ได้คำตอบที่ยอดเยี่ยมสำหรับ innodb คุณจะต้องลบข้อ จำกัด FK ใด ๆ ที่อ้างอิงถึงตารางก่อนที่จะทิ้ง tablespace หลังจากการนำเข้าคุณควรสร้าง FK ใหม่
SebaGra

หลังจากนำเข้าพื้นที่ตารางinformation_schema.key_column_usage(อาจเป็นตารางอื่นเช่นกัน) จะไม่ส่งคืนข้อมูลในครั้งแรกselectดังนั้นคุณต้องดำเนินการแบบสอบถามอย่างน้อยหนึ่งรายการและรอสักครู่ก่อนที่แบบสอบถามต่อไปจะทำงานได้ (mysql Ver 14.14 Distrib 5.7.19, สำหรับ linux-glibc2.12 (x86_64) โดยใช้ EditLine wrapper)
user3338098
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.