Memulihkan Tabel MySQL ketika hanya file .frm dan Jerry ibd tersedia

Bagaimana memecahkan “Kesalahan MySQL #1146 -Meja tidak ada” disebabkan oleh memindahkan file .IDB (InnoDB) langsung antara direktori (tablespace).

logo_mysql

Masalah

Banyak masalah yang kita miliki adalah masalah kita. Saya telah mendirikan sebuah situs yang menggunakan WordPress dan berpikir: Bagaimana melihat bagaimana ini bekerja di PHP 7? Oke, sebagai WampServer saya menggunakan PHP 5.6, Jadi saya harus “Bahagia” ide untuk meng-upgrade WampServer 2.5 (Apache-2.4.9, MySQL-5.6.17, PHP 5.5.12) untuk WampServer 3.0.6 (Apache 2.4.23, MySQL 5.7.14, 5.6.25 PHP dan Php 7.0.10).

Tentu saja, Dimulai oleh cadangan, tetapi saya tergelincir besar memilih untuk tidak mengekspor SQL dari seperti situs, Sebaliknya, hanya membuat salinan file MySQL (MySQL data) dan aplikasi (www/situs). Aku yakin itu akan bekerja, seperti lain waktu.

Setelah menginstal WampServer baru dengan PHP 7, menempatkan file cadangan dan kembali aplikasi, hanya ketika saya pergi untuk menguji oleh browser, tidak muncul situs, Tapi layar instalasi WordPress seolah-olah itu adalah sebuah situs baru. Beku! Buka PHPMyAdmin dan mengecek jika database adalah Ok dan saya melihat bahwa, Meskipun yang terdaftar dalam database, Ketika Anda mengklik di atas tabel untuk melihat data pesan galat berikut:

  MySQL Kesalahan #1146 -Tabel <TABLE_NAME> doesn ' t ada

Saya telah mencari dan saya hanya menemukan bahwa Anda dapat hanya menyalin atau memindahkan file langsung ke direktori MySQL MySQL lain jika file jenis MyISAM, orang-orang dengan ekstensi file frm. MYD. MYI. Aku tidak tahu apa yang terjadi, Tapi database saya muncul sebagai InnoDB (.FRM dan idb). Sayangnya, hanya setelah fakta bahwa MySQL diperingatkan dokumentasi:

  Anda tidak bisa bergerak bebas .IBD file antara direktori database The Anda dapat dengan MyISAM tabel file. 
  Definisi meja yang disimpan dalam tablespace InnoDB bersama termasuk nama database. 
  Transaksi id dan log urutan nomor disimpan dalam file tablespace juga berbeda antara database.

Solusi

Aku harus melakukan beberapa solusi sederhana, tapi saya akan menjelaskan di sini satu-satunya yang benar-benar bekerja untuk saya, Meskipun tampaknya jauh lebih kompleks, ditemukan dalam posting “Mengembalikan tabel(s) di basis data MySQL ketika file frm atau ibd tersedia hanya“.

Sebelum, Namun, judul pengetahuan, Ingat bahwa dalam kaitannya dengan InnoDB ketik, MySQL struktur penjaga Anda dalam file dan data di ibd .frm.. Teori cukup, Mari kita dipotong untuk mengejar!

Langkah 1: Membuat ulang struktur file .frm

Seperti kata, frm berisi struktur tabel Anda. Pertama kita perlu mengambil struktur ini untuk kemudian mengisi data. Anda dapat melakukan ini 3 berbagai metode yang dijelaskan di bawah ini, Tapi sebelumnya, Biarkan saya memberitahu Anda sesuatu tentang “MySQL utilitas”.

MySQL utilitas | mysqlfrm

Jika Anda tidak berniat untuk menggunakan metode pertama yang diusulkan (Online) Jadi Anda perlu menggunakan alat “mysqlfrm” disediakan oleh “MySQL utilitas“.

Alat ini akan mengekstrak struktur data dan menghasilkan skrip SQL penciptaan Meja. Untuk ini, Men-download “MySQL utilitas” (sesuatu seperti mysql-utilitas-1.6.4-winx64.msi) dan menginstalnya.

Membuka konsol (Perintah / Dari) dan menggunakan perintah CD untuk memindahkan direktori instalasi default (sesuatu seperti C:\C:Program FilesMySQLMySQL utilitas 1.6\). Perhatikan bahwa dalam direktori ini ada executable mysqlfrm.exe.

  CD "C:\C:Program FilesMySQLMySQL utilitas 1.6"

Memilih hanya salah satu metode di bawah ini untuk mengekstrak Anda struktur tabel yang terkandung dalam file .frm:

1º Metode | Online

1. Pergi ke situs HTTPS://Recovery.twindb.com/;
2. Klik pada menu “Memulihkan struktur” dan kemudian dalam “FRM file dari.“;
3. Klik pada tombol “Browser…” dan pilih frm file; dan
4. Klik pada tombol “Meng-upload” dan tabel penciptaan script akan ditampilkan pada layar.

Hal ini dimungkinkan untuk mengirim beberapa file frm sekali menghasilkan satu script dengan semua tabel. Hanya untuk membiarkan Anda membuat .zip dengan semua .frm yang sebelumnya “Browser meng-Upload”.

2º Metode | Menggunakan –diagnostik

/* Contoh generik */
   mysqlfrm-diagnostik "<sumber/path>/mytable.FRM" > "<Destination/path/recovered_mytable.SQL>"
 
/* Contoh dalam praktek dengan tabel wp_posts.frm Wordpress */
   mysqlfrm --diagnostik "C:\wampbinmysqlmysql5.6.17datameubancowp_posts.FRM" > "C:\recovered_wp_posts.SQL"

3º Metode | Menggunakan –Server

/* Contoh generik */
  mysqlfrm-server=akar:mypassword@localhost-port=3311 "<sumber/path>/mytable.FRM" > "<tujuan jalan>/recovered_mytable.SQL"
 
/* Contoh dalam praktek dengan tabel wp_posts.frm Wordpress */
  mysqlfrm --Server=akar@localhost --Port=3307 ""(C):\wampbinMySQL\MySQL5.6.17\datameubancowp_posts.FRM" > "(C):\recovered_wp_posts.SQL"

Jangan gunakan pelabuhan MySQL! Pilih lainnya tersedia. Perhatikan bahwa perintah mengarahkan output ke file .SQL yang tersimpan dalam jalan yang ditetapkan (dalam kasus, (C):).

Langkah 2: Membuat ulang tabel dalam database Anda

Dalam database baru, Buat tabel dengan script dihasilkan langkah 1. Saya secara pribadi menginstal versi WampServer bersih dan menggunakan PHPMyAdmin (http://localhost/phpmyadmin /) untuk membuat database dan impor skrip SQL yang dibuat di langkah 1 (recovered_wp_posts.SQL). Script ini akan membuat 2 file dalam direktori database MySQL Anda:

  SUA_TABELA.FRM SUA_TABELA.IDB

Dalam kasus saya, File-file ini diciptakan pada (C):\wamp64binmysqlmysql5.7.14data<kursi saya>. IE, mencari instalasi MySQL Anda dan perhatikan bahwa dalam direktori tanggal Akan ada database Anda dan file dua yang disebutkan.

Langkah 3: Hapus file .IDB baru

Untuk menghapus file .IDB baru, Jalankan perintah SQL berikut:

/* Contoh generik */
  ALTER TABLE mytable MEMBUANG TABLESPACE;
 
/* Contoh dalam praktek dengan tabel wp_posts Wordpress */
  MENGUBAH tabel wp_posts MEMBUANG TABLESPACE;

Perintah ini mengapus hubungan antara tabel dan tablespace (Mana secara fisik disimpan file database), dan menghapus .IDB file.

Langkah 4: Salin file .IDB tua

File .IDB asli (yang berisi data) perlu disalin ke tempat yang mendapat dihapus di langkah .IDB 3. Gunakan Ctrl + C dan Ctrl + V, atau bunuh diri dengan menggunakan baris perintah.

Langkah 5: Mengaktifkan kembali tabel

Link yang rusak dalam langkah 3 kebutuhan akan dipulihkan dengan perintah berikut:

/* Contoh generik */
  ALTER TABLE mytable impor TABLESPACE;
 
/* Contoh dalam praktek dengan tabel wp_posts Wordpress */
  MENGUBAH tabel wp_posts impor TABLESPACE;

Jangan khawatir jika Anda menerima peringatan beberapa, Namun, Mungkin umum kerusakan muncul error berikut:

  #1808 - Skema ketidakcocokan (Tabel memiliki ROW_TYPE_DYNAMIC baris format, .IBD file memiliki format baris ROW_TYPE_COMPACT.)

Dalam hal ini, Hal ini terjadi karena berbeda daripada mysql 5.7.14 (BARU) menciptakan tabel standar dibandingkan dengan Mysql-5.6.17 (LAMA), tanpa ROW_FORMAT = kompak.

Jadi, Jika Anda menggunakan MySQL > = mysql 5.7.14, Semua yang perlu Anda lakukan adalah menambahkan ROW_FORMAT = kompak dalam definisi tabel penciptaan.

  CREATE TABLE 'wp_posts' (. . .) MESIN=InnoDB ROW_FORMAT=kompak

Outros erros

Apenas para deixar registrado, Antes de obter sucesso na extração de dados do .frm, tive alguns erros:

  # Sumber di localhost: ... terhubung.
  # Mulai spawned server pada port 3304 ... KESALAHAN yang berusaha untuk menghentikan gagal melahirkan server.  Id proses = 6648.
  KESALAHAN: Spawn server operasi gagal. Kesalahan server klon: Mampu berkomunikasi dengan Baru contoh. Id proses = 6648.. Untuk mendiagnosa, Jalankan utilitas lagi dan menggunakan The --pilihan bertele-tele untuk melihat pesan dari spawned server dan memperbaiki kesalahan disajikan kemudian jalankan utilitas lagi.
  SUKSES: Proses dengan PID 6648 (anak proses PID 7264) telah dihentikan.
Traceback (Pemesanan panggilan terakhir):
  File "G:\adebuildsb_0-19921351-1470074463.97Python-2.7.6-Windows-x86-64bitlibsite-packagescx_FreezeinitscriptsConsole.py", garis 27, dalam <modul>
  File "scripts\mysqlfrm.py", garis 422, dalam <modul>
  File ".\mysql\utilities\command\read_frm.py", garis 439, di read_frm_files
  File ".\mysql\utilities\command\read_frm.py", garis 166, di _spawn_server
  File ".\mysql\utilities\command\serverclone.py", garis 180, di clone_server
  File ".\mysql\utilities\common\tools.py", garis 273, dalam get_mysqld_version IOError: [Errno 13] Izin ditolak: 'version_check'

Específico caso tidak melakukan WordPress, Anda perlu untuk menghapus skrip yang dihasilkan SQL yang dihasilkan di bawah. frm, Semua entries standar ‘0000-00-00 00:00:00’, Jika tidak, akan menangkap kesalahan:

  #1067 - Nilai default (standar) tidak berlaku untuk 'comment_date'

That's it!

Font

http://www.voxteneo.com/restoring-tables-mysql-database-frm-ibd-files-available/

https://medium.com/@alexquick/transporting-mysql-tablespaces-from-5-6-to-5-7-517c01345fbb#.72zermd8b

http://dev.mysql.com/doc/refman/5.5/en/innodb-multiple-tablespaces.html

https://lanmenezesbr.wordpress.com/2014/10/21/mysql-erro-1146-table-doesnt-exist/

http://stackoverflow.com/questions/7759170/mysql-table-doesnt-exist-but-it-does-or-it-should

Jumlah total hits: 14922

10 Komentar pada “Memulihkan Tabel MySQL ketika hanya file .frm dan Jerry ibd tersedia

  1. Rodrigo mengatakan:

    Apa yang harus dilakukan ketika Anda melihat pesan galat berikut: #1815 – Kesalahan internal. Tidak dapat membuat ulang LSNs dalam tabel “kursi saya”.”myTable”: Struktur data korupsi.
    Saya dapat menjalankan sisipan data secara manual? Como lakukan isso?
    Desde já te agradeço.

  2. Cristian U mengatakan:

    Hi Taylor,

    Bagaimana menurut Anda memecahkan kesalahan ini:
    KESALAHAN: Spawn server operasi gagal. Kesalahan server klon: Mampu berkomunikasi dengan instance baru. Id proses = 6648.. Untuk mendiagnosa, Jalankan utilitas lagi dan menggunakan –pilihan bertele-tele untuk melihat pesan dari spawned server dan memperbaiki kesalahan disajikan kemudian jalankan utilitas lagi.
    SUKSES: Proses dengan PID 6648 (anak proses PID 7264) telah dihentikan.

    Saya terus menerima pesan yang sama dan saya don´t tahu bagaimana mengatasinya.

    Terima kasih

Tinggalkan balasan

Alamat email Anda tidak akan dipublikasikan. Kolom yang harus diisi ditandai dengan *