pengembangan-web-mp-pd.com

Mengembalikan Tabel MySQL dari file .ibd, .frm dan mysqllogbin

Untuk beberapa alasan, ketika saya mencoba untuk membuka tabel saya yang disimpan dalam file .frm Dan .ibd (Apakah pada MySQL atau phpmyadmin) itu memberi saya kesalahan sintaks, atau katanya tidak ada.

Saya telah membaca posting lain yang memiliki masalah serupa dengan ini, tetapi saya tidak tahu bagaimana memeriksa apakah innodb_file_per_table Diaktifkan, dan saya secara keseluruhan hanya benar-benar bingung. Saya juga mengonversi salinan file mysql-bin.000002 Saya ke file txt jadi saya melihat bahwa data dari basis data saya tidak sepenuhnya hilang.

Basis data dibuat tahun lalu. Saya memiliki 6 file mysql-bin.00000 Itu, tetapi karena alasan tertentu .000002 Adalah yang terbesar. Saat ini, saya memiliki file .ibd Dan .frm Untuk semua database saya, tetapi saya bingung bagaimana saya bisa mengembalikannya kembali ke MySQL, atau setidaknya menjadi sesuatu yang saya bisa. Baca.

Saya menggunakan WampServer 2.4 dan MySQL 5.6.12 pada Windows 2003 Server. Juga, apakah saya harus mengunduh plugin di InnoDB?

10
carment

Saya akhirnya menemukan dan menyelesaikan masalah saya melalui banyak trial and error. Bagi mereka yang tidak memiliki file ibdata1 asli mereka, dan hanya memiliki file .frm dan .ibd, inilah cara saya memulihkan data saya.

  1. Unduh dan instal utilitas MySQL di -> http://dev.mysql.com/downloads/utilities .
  2. Pergilah ke perintah/terminal Anda untuk membuka utilitas MySQL, mysqlfrm, dan gunakan untuk menemukan struktur tabel Anda yang perlu Anda pulihkan. Bagaimana saya melakukan itu, adalah saya dimasukkan ke lokasi file mysqlfrm, kemudian dimasukkan "mysqlfrm --server = pengguna: pwd @ localhost --port = 3307" path_to_.frm_file "> table_name.txt". File .txt harus disimpan di folder yang sama dengan tempat utilitas Anda disimpan jika Anda tidak menentukan ke mana Anda ingin pergi.
  3. Dalam file teks, Anda akan melihat pernyataan CREATE TABLE, yang mencakup semua kolom dan info (pada dasarnya, struktur asli) dari tabel Anda. Salin pernyataan CREATE itu dengan semua info itu.
  4. Di Perintah MySQL Anda, buat database baru (CREATE DATABASE database_name). Buatlah nama yang sama dengan nama database asli Anda.
  5. Buat tabel baru di dalam database baru - itu tidak harus nama yang sama dengan folder. Anda dapat membuat tabel baru di dalam perintah Prompt, tetapi saya membuat tabel saya di PhpMyAdmin, alat perangkat lunak gratis yang menangani administrasi MySQL melalui web. Saya cukup mengklik database pada PhpMyAdmin, lalu tabel SQL, dan menempelkan struktur tabel dari # 3. (Sebagai catatan, saya selalu menerima kesalahan jika saya memberi nama tabel saya "tabel" di Prompt perintah saya, jadi cobalah untuk menghindari nama itu).
  6. Pada Perintah MySQL Anda, masuk ke database Anda, dan masukkan "ALTER TABLE table_name DISCARD TABLESPACE", yang pada dasarnya akan menghapus file .ibd tabel ini.
  7. Salin tabel asli Anda (tabel yang ingin Anda pulihkan) .ibd file ke dalam tabel yang baru dibuat untuk mengganti file .ibd yang baru saja Anda hapus. Ubah file .ibd awal Anda ke nama tabel yang baru dibuat. Ini akan meniru file .ibd lama yang baru saja Anda hapus. Anda dapat menemukan folder ini di folder data MySQL, di bawah folder database yang baru dibuat di komputer Anda.
  8. Kembali ke Perintah MySQL Anda, masuk ke database Anda, dan masukkan "ALTER TABLE table_Name IMPORT TABLESPACE." Anda akan menerima "peringatan" (1) pernyataan tipe kesalahan, tetapi abaikan saja.
  9. Dan dilakukan! jika Anda mencoba mengakses tabel baru Anda, itu harus berisi semua data dari tabel lama Anda.

Saya harap ini membantu, dan beri tahu saya jika Anda memiliki pertanyaan atau komentar! Juga, periksa http://www.chriscalender.com/?tag=innodb-error-tablespace-id-in-file untuk detail lainnya.

19
carment

File data InnoDB utama - biasanya bernama ibdata - sangat penting bagi Anda MySQL untuk dapat memahami file .ibd Anda.

Jika Anda perlu memindahkan data antar server menggunakan file biner, Anda harus menghentikan MySQL dengan bersih dan kemudian memindahkan semua file data, termasuk file ibdata (-) , di antara direktori.

Mekanisme yang lebih dapat diandalkan untuk memindahkan data antar server pada Windows adalah dengan menggunakan ( mysqldump ) atau ekspor basis data dari PHPMyAdmin (atau alat serupa).

Jika pencatatan biner telah diaktifkan sepanjang waktu ketika server Anda berjalan (berdasarkan komentar, ini mungkin bukan masalahnya), Anda juga dapat menggunakan mysqlbinlog untuk memulihkan setiap pernyataan SQL yang Anda jalankan di server dari file mysql-bin, dan buat ulang database dengan cara itu. Seharusnya ada nix cap wakt di file mysql-bin yang membantu Anda menentukan seberapa jauh mereka pergi.

Jika Anda kehilangan file database asli dan yang tersisa hanyalah file .ibd individual, Anda mungkin harus memulihkan data sesuai saran akuzminsky di komentar.

MySQL 5.6 memiliki beberapa fitur baru untuk memindahkan file data InnoDB .ibd ( tablespace yang bisa diangkut ), tetapi ini memerlukan beberapa upaya dan, untuk database yang cukup kecil, akan lebih mudah untuk mentransfer data menggunakan mysqldump.

4
Nathan Jolly

Jawaban wiki dihasilkan dari komentar pertanyaan oleh akuzminsky


Jika kamu melihat *.ibd file lalu innodb_file_per_table adalah ON, jika tidak semua tabel berada di ibdata1.

Jika itu memberitahu tabel tidak ada maka tabel tersebut hilang dalam kamus InnoDB. Cobalah untuk membuang semua tabel ke dalam dump sql terpisah (satu tabel - satu file). Tabel-tabel yang tidak dapat Anda buang dapat dipulihkan dengan TwinDB recovery toolkit .

Belum ada paket biner. Anda harus mendapatkan kode sumber dari GitHub dan mengompilasinya. Lihat petunjuk di Pulihkan kamus InnoDB . Cukup mudah:

git clone [email protected]:twindb/undrop-for-innodb.git

lalu

make all
0
Paul White 9