Inilah mengapa MySQL tidak dapat melihat file-file itu: tablespace sistem (ibdata1) memiliki kamus data spesifik Storage-Engine yang memungkinkan InnoDB memetakan potensi penggunaan tabel:
Memindahkan tabel InnoDB dari satu tempat ke tempat lain membutuhkan perintah seperti
ALTER TABLE tblname DISCARD TABLESPACE;
ALTER TABLE tblname IMPORT TABLESPACE;
Berikut adalah bagian dari Dokumentasi MySQL 5.5 yang menjelaskan apa yang perlu dipertimbangkan
Pertimbangan Portabilitas untuk File .ibd
Anda tidak dapat dengan bebas memindahkan file .ibd di antara direktori database seperti yang Anda bisa dengan file tabel MyISAM. Definisi tabel yang disimpan dalam tablespace bersama InnoDB termasuk nama database. ID transaksi dan nomor urutan log yang disimpan dalam file tablespace juga berbeda di antara basis data.
Untuk memindahkan file .ibd dan tabel terkait dari satu database ke yang lain, gunakan pernyataan RENAME TABLE:
RENAME TABLE db1.tbl_name TO db2.tbl_name; Jika Anda memiliki cadangan "bersih" dari file .ibd, Anda dapat mengembalikannya ke instalasi MySQL dari mana asalnya sebagai berikut:
Tabel tidak boleh jatuh atau terpotong sejak Anda menyalin file .ibd, karena hal itu mengubah ID tabel yang disimpan di dalam tablespace.
Terbitkan pernyataan ALTER TABLE ini untuk menghapus file .ibd saat ini:
ALTER TABLE tbl_name DISCARD TABLESPACE; Salin file .ibd cadangan ke direktori database yang tepat.
Berikan pernyataan ALTER TABLE ini untuk memberi tahu InnoDB agar menggunakan file .ibd baru untuk tabel:
ALTER TABLE tbl_name IMPORT TABLESPACE; Dalam konteks ini, cadangan file .ibd "clean" adalah salah satu yang memenuhi persyaratan berikut:
Tidak ada modifikasi tanpa komitmen oleh transaksi dalam file .ibd.
Tidak ada entri buffer penyisipan yang tidak dihapus dalam file .ibd.
Purge telah menghapus semua catatan indeks yang ditandai dari file .ibd.
mysqld telah mem-flush semua halaman yang dimodifikasi dari file .ibd dari kumpulan buffer ke file.
Dengan adanya peringatan dan protokol ini, berikut adalah tindakan yang disarankan
Untuk contoh ini, mari kita coba mengembalikan tags
tabel ke mydb
database
LANGKAH 1
Pastikan Anda memiliki cadangannya .frm
dan .ibd
file di dalamnya/tmp/innodb_data
LANGKAH 2
Dapatkan CREATE TABLE tags
pernyataan itu dan jalankan sebagai CREATE TABLE mydb.tags ...
. Pastikan strukturnya sama persis seperti aslinyatags.frm
LANGKAH # 3
Hapus yang kosong tags.ibd
menggunakan MySQL
ALTER TABLE mydb.tags DISCARD TABLESPACE;
LANGKAH # 4
Bawa salinan cadangan tags.ibd
cd /var/lib/mysql/mydb
cp /tmp/innodb_data.tags.ibd .
chown mysql:mysql tags.ibd
LANGKAH # 5
Tambahkan tags
tabel ke Kamus Data InnoDB
ALTER TABLE mydb.tags IMPORT TABLESPACE;
LANGKAH 6
Uji aksesibilitas tabel
SHOW CREATE TABLE mydb.tags\G
SELECT * FROM mydb.tags LIMIT 10;
Jika Anda mendapatkan hasil yang normal, selamat Anda mengimpor tabel InnoDB.
LANGKAH 7
Di masa depan, tolong jangan hapus ibdata1 dan log-nya
Cobalah !!!
Saya sudah membahas hal-hal seperti ini sebelumnya
CAVEAT
Bagaimana jika Anda tidak tahu struktur tabel tags
?
Ada alat untuk mendapatkan pernyataan CREATE TABLE hanya dengan menggunakan .frm
file. Saya menulis posting tentang ini juga: Bagaimana cara mengekstrak skema tabel hanya dari file .frm? . Dalam posting itu, saya menyalin file .frm ke mesin Windows dari kotak Linux, menjalankan alat Windows dan mendapatkan CREATE TABLE
pernyataan.