Pulihkan database MySQL dari folder data tanpa ibdata1 dari file ibd

15

Direktori WAMP saya secara tidak sengaja terhapus oleh pengguna lain. Hanya folder data di MySQL yang tersedia. Dan, dalam folder database hanya (folder dalam "\ bin \ mysql \ mysql5.6.12 \ data \" dengan nama database) tersedia. Semua file termasuk " ibdata1 " di root "\ bin \ mysql \ mysql5.6.12 \ data \" juga dihapus.

Folder database berisi file dengan ekstensi di bawah ini saja.

* .frm, * .ibd

dan file "db.opt".

Bagaimana basis data dapat dipulihkan?

Saya sudah mencoba memulihkan bdata1. Tapi, tidak bisa mendapatkannya kembali. Dan, beberapa basis data juga mengandung MYISAM.

cyberwani
sumber

Jawaban:

16

MyISAM

Untuk tabel MyISAM, mydb.mytable, Anda harus memiliki tiga file

  • \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

Mereka harus sudah dapat diakses sebagai tabel karena setiap file berisi data yang diperlukan, metadata, dan info indeks. Secara kolektif, mereka membentuk tabel. Tidak ada mecahnisme mesin penyimpanan eksternal untuk diakses.

InnoDB

Lihatlah Representasi Pictorial dari InnoDB ini

Arsitektur InnoDB

Satu-satunya hal yang melampirkan ibdata1 ke .ibdfile adalah kamus data.

Misi Anda, jika Anda memutuskan untuk menerimanya, adalah membuat setiap tabel dan bertukar di .ibd

Sebelum Anda melakukan apa pun, buat salinan lengkap "\ bin \ mysql \ mysql5.6.12 \ data" ke yang lain

Berikut ini contohnya

Misalkan Anda memiliki database mydbdengan tabel mytable. Ini berarti

  • Anda memiliki foldernya \bin\mysql\mysql5.6.12\data\mydb
  • Di dalam folder itu, Anda punya
    • mytable.frm
    • mytable.ibd

Anda membutuhkan .frm. Jika Anda melihat posting saya Bagaimana cara mengekstrak skema tabel hanya dari file .frm? , Anda dapat mengunduh utilitas MySQL yang dapat menghasilkan SQL yang diperlukan untuk membuat tabel.

Anda sekarang harus melakukan hal berikut

  • Pindah mytable.ibdke\bin\mysql\mysql5.6.12\data
  • Jalankan SQL untuk membuat tabel InnoDB
  • Login ke mysql dan jalankan ALTER TABLE mydb.mytable DISCARD TABLESPACE;(ini akan menghapus \bin\mysql\mysql5.6.12\data\mydb\mytable.ibd)
  • Salin \bin\mysql\mysql5.6.12\data\mytable.ibdke\bin\mysql\mysql5.6.12\data\mydb
  • Login ke mysql dan jalankan ALTER TABLE mydb.mytable IMPORT TABLESPACE;(Ini akan mendaftar \bin\mysql\mysql5.6.12\data\mydb\mytable.ibdke kamus data)

Setelah ini, tabel mydb.mytableharus dapat diakses sepenuhnya. Anda dapat menguji aksesibilitas itu hanya dengan menjalankan:

SELECT * FROM mydb.mytable LIMIT 10;

Cobalah !!!

MINUM (Pemulihan Data Menggabungkan Pengetahuan yang Diperlukan) Secara Bertanggung Jawab

RolandoMySQLDBA
sumber
Untuk menyelesaikan jawaban yang bagus ini, untuk innodb Anda harus menghapus batasan FK yang merujuk tabel sebelum membuang tablespace-nya. Setelah impor, Anda harus membuat ulang FK.
SebaGra
setelah ruang tabel mengimpor information_schema.key_column_usage(mungkin juga tabel lain) akan mengembalikan data pada yang pertama selectsehingga Anda harus menjalankan setidaknya satu permintaan dan menunggu beberapa detik sebelum permintaan berikutnya dapat bekerja. (mysql Ver 14.14 Distrib 5.7.19, untuk linux-glibc2.12 (x86_64) menggunakan bungkus EditLine)
user3338098