Saya sebelumnya telah menyimpan salinan direktori / var / lib / mysql / ddms ("ddms" adalah nama skema). Sekarang saya menginstal MySQL baru pada Ubuntu 10.04.3 LTS yang baru diinstal dengan menjalankan apt-get install mysql-server
, saya percaya versi 5.1 telah diinstal. Setelah saya menyalin direktori ddms di bawah / var / lib / mysql, beberapa tabelnya berfungsi dengan baik, ini adalah tabel dengan kumpulan tiga file yang terkait: file .frm, file .MYD, dan file .MYI.
Namun, ada dua tabel dengan kumpulan file yang berbeda: file .frm dan file .ibd. Dua tabel ini tidak muncul dalam daftar tabel di phpMyAdmin. Ketika saya melihat log kesalahan, ia mengatakan:
[ERROR] Cannot find or open table ddms/dictionary_item from
the internal data dictionary of InnoDB though the .frm file for the
table exists. Maybe you have deleted and recreated InnoDB data
files but have forgotten to delete the corresponding .frm files
of InnoDB tables, or you have moved .frm files to another database?
or, the table contains indexes that this version of the engine
doesn't support.
Tolong bantu dengan mengembalikan dua tabel ini. Terima kasih.
Jawaban:
Tabel InnoDB tidak dapat disalin dengan cara yang sama seperti tabel MyISAM.
Hanya menyalin file .frm dan .ibd dari satu lokasi ke lokasi lain sedang mengalami masalah. Menyalin file .frm dan .ibd dari tabel InnoDB hanya baik jika dan hanya jika Anda dapat menjamin bahwa id tablespace dari file .ibd cocok persis dengan entri tablespace tablesd dalam metdata dari file ibdata1 .
Saya menulis dua posting di DBA StackExchange tentang konsep id tablespace ini
Berikut ini adalah tautan bagus tentang cara memasang kembali file .ibd ke ibdata1 jika id tablespace tidak cocok: http://www.chriscalender.com/?tag=innodb-error-tablespace-id-in-file . Setelah membaca ini, Anda harus segera menyadari bahwa menyalin file .ibd benar-benar gila.
Anda dapat menerapkan saran dari tautan Kalender Chris, atau Anda dapat kembali ke instalasi lama mysql, memulai Facebook mysql, dan kemudian mysqldump
ddms
database. Kemudian, impor mysqldump ke instance mysql baru Anda. Percayalah, ini akan jauh lebih mudah.sumber
How to Recover an InnoDB table whose files were moved around
benar-benar menyelamatkan hidup saya. Terima kasih banyak.Baru-baru ini saya mengalami masalah yang sama. Berikut adalah langkah-langkah yang saya gunakan untuk menyelesaikannya tanpa harus dipusingkan dengan tablespace id seperti yang disebutkan RolandoMySQLDBA di atas. Saya menggunakan Mac dan jadi saya menggunakan MAMP untuk mengembalikan Database ke titik di mana saya bisa mengekspornya di dump MySQL.
Anda dapat membaca posting blog lengkap tentang hal itu di sini: http://www.quora.com/Jordan-Ryan/Web-Dev/Bagaimana- untuk- Pulihkan-innoDB-MySQL-files-using-MAMP-on-a- Mac
Anda harus memiliki:
-ibdata1
-ib_logfile0
-ib_logfile1
File -.FRM dari folder mysql_database Anda
-Instalasi baru dari MAMP / MAMP Pro yang ingin Anda hancurkan (jika perlu)
Salin di semua folder dan file yang termasuk dalam arsip folder mysql dari server produksi (mt lingkungan Plesk dalam kasus saya) KECUALI JANGAN TERLALU MENYATAKAN:
- / Aplikasi / MAMP / db / mysql / mysql /
- / Aplikasi / MAMP / db / mysql / mysql_upgrade_info
- / Aplikasi / MAMP / db / mysql / performance_schema
Dan voila, Anda sekarang harus dapat mengakses database dari phpMyAdmin, sungguh melegakan!
Tapi kami belum selesai, Anda sekarang perlu melakukan mysqldump untuk mengembalikan file-file ini ke lingkungan produksi Anda, dan antarmuka phpmyadmin time out untuk database besar. Ikuti langkah-langkah di sini:
http://nickhardeman.com/308/export-import-large-database-using-mamp-with-terminal/
Disalin di bawah untuk referensi. Perhatikan bahwa pada instalasi MAMP default, kata sandi adalah "root".
Bagaimana menjalankan mysqldump untuk MAMP menggunakan Terminal
DATABASE EKSPOR DARI MAMP [1]
Langkah Satu: Buka jendela terminal baru
Langkah Dua: Arahkan ke instalasi MAMP dengan memasukkan baris berikut di terminal cd / aplikasi / MAMP / library / bin Tekan tombol enter
Langkah Tiga: Tulis perintah dump ./mysqldump -u [USERNAME] -p [DATA_BASENAME]> [PATH_TO_FILE] Tekan tombol enter
Contoh:
Tip cepat: untuk menavigasi ke folder dengan cepat Anda dapat menyeret folder ke jendela terminal dan itu akan menulis lokasi folder. Itu adalah hari yang menyenangkan ketika seseorang menunjukkan ini kepada saya.
Langkah Empat: Baris teks ini akan muncul setelah Anda menekan enter. Masukkan kata sandi: Jadi coba tebak, ketik kata sandi Anda, perlu diingat bahwa huruf-huruf tidak akan muncul, tetapi mereka ada di sana. Tekan tombol enter.
Langkah Kelima: Periksa lokasi tempat Anda menyimpan file Anda, jika ada, SUKSES Sekarang Anda dapat mengimpor database, yang akan diuraikan selanjutnya.
Sekarang setelah Anda mengekspor database mysql Anda, Anda dapat mengimpornya di lingkungan produksi.
sumber
Saya telah memulihkan file MySQL 5.5 * .ibd dan * .frm saya dengan menggunakan MySQL Utilites dan MariaDB 10.
1) Menghasilkan Buat SQL.
Anda bisa mendapatkan sql dari file frm. Anda harus menggunakan: https://dev.mysql.com/doc/mysql-utilities/1.5/en/mysqlfrm.html
shell> mysqlfrm --server = root: pass @ localhost: 3306 c: \ MY \ t1.frm - -port = 3310
Cara lain Anda mungkin membuat sql Anda.
2) Buat Tabel Anda.
Buat tabel Anda di database.
3) ubah tabel xxx buang tablespace
Buang tabel Anda yang ingin Anda ganti file * .ibd Anda.
4) Salin file * .ibd Anda (MySQL Atau MariaDB) ke jalur data MariaDB
Pertama saya mencoba menggunakan MySQL 5.5 dan 5.6 untuk memulihkan, tetapi database macet dan segera berhenti tentang tablespace id broken error. ( KESALAHAN 1030 (HY000): Mendapat kesalahan -1 dari mesin penyimpanan )
Setelah saya menggunakan MariaDB 10.1.8, dan saya berhasil memulihkan data saya.
5) mengubah tabel xxx impor tablespace
Ketika Anda menjalankan pernyataan ini, MariaDB memperingatkan tentang file tetapi itu tidak penting daripada memulihkan data Anda :) Database masih berlanjut dan Anda dapat melihat data Anda.
Saya harap informasi ini bermanfaat bagi Anda.
sumber
mysqlfrm
(mencoba versi 1.3.5 dan 1.6.5 dengan MySQL 5.6 dan 5.7) tidak memberikanCREATE
definisi yang benar , bahkan ketika menggunakan MySQL 5.7 ( ROW_FORMAT default berubah di MySQL 5.7.9 ) menghasilkanSchema mismatch (Expected FSP_SPACE_FLAGS=0x21, .ibd file contains 0x0.)
ketika mengimpor tablespace. Menambahkan secara manualROW_FORMAT=compact
di akhirCREATE
pernyataan berhasil.Manually adding ROW_FORMAT=compact at the end of the CREATE statement did the trick.
Itu berhasil juga untuk saya. Terima kasih! 👍Saya memiliki masalah yang sama persis hanya memiliki file sebagai cadangan.
Apa yang saya lakukan untuk mengatasinya adalah menyalin file database ke / var / lib / mysql / yourdb dan ibdata1 yang ditempatkan di / var / lib / mysql.
Saya kemudian dapat memverifikasi bahwa saya dapat mengakses tabel mysql -u root -p dbname dan menanyakan beberapa tabel yang sebelumnya rusak.
Saya melakukan dump database setelahnya dengan mysqldump -u root -p [root_password] [database_name]> dumpfilename.sql
sumber
Jika Anda menggunakan MAMP dan Anda tidak bisa memulai MySQL setelah Anda menyalin file Anda, saya masukkan ke
innodb_force_recovery = 2
dalammy.ini
dan kemudian saya bisa mendapatkan mysql untuk memulai dan mengekspor db saya keluar.sumber
Jika Anda dapat mengembalikan file * .ibd ke server MySQL asli, jangan lupa untuk mengembalikan hak akses file juga. Dalam kasus saya (MySQL8 pada CentOS7), saya mengembalikan file ke /var/lib/mysql/db/tablename.ibd dan jalankan:
Sebelum memperbaiki hak akses, mengakses tabel mengakibatkan kesalahan "2006 server MySQL telah pergi". Setelah memperbaiki hak akses, tabel bekerja (bahkan tanpa me-restart layanan mysqld).
sumber
Saya telah mengumpulkan posting dari topik serupa (Jawaban siapa yang tidak diposting di sini):
solusi 1: https://dba.stackexchange.com/a/59978
solusi 2: https://dba.stackexchange.com/a/71785 (+ pos lainnya di sana)
solusi 3: kit pemulihan untuk tabel: https://twindb.com/how-to-recover-innodb-dictionary/
solusi 4: Pulihkan database MySQL dari folder data tanpa ibdata1 dari file ibd
solusi 5: menggunakan
mysqlfrm
perintahsolusi 6: https://dba.stackexchange.com/a/159001
solusi 7: https://dba.stackexchange.com/a/144573
sumber
Saya hanya ingin menambahkan satu hal lagi untuk pengguna macos El Capitan. Utilitas MySQL tidak didukung untuk versi ini, jadi perintah mysqlfrm tidak membantu. Apa yang saya lakukan adalah memulihkan struktur tabel saya dengan dbsake seperti yang ditunjukkan pada tautan ini: https://www.percona.com/blog/2015/12/16/recovering-table-structure-from-frm-files-using-dbsake/
Yang perlu Anda lakukan adalah menginstal dbsake:
kemudian gunakan perintah frmdump dan berikan path ke file .frm Anda:
Anda akan mendapatkan pernyataan create. Setelah saya melakukan ini, saya cukup mengikuti langkah 2 hingga 5 yang sudah disebutkan oleh @Ecd. Semoga ini bisa membantu seseorang.
sumber
Saya sangat menghargai Ecd. Apa yang berhasil untuk saya:
1.- Saya punya cadangan dari basis beberapa bulan yang lalu ini membantu saya untuk mengangkat cadangan ini di xampp di Windows 10 dan membuat tabel untuk memiliki struktur (konfigurasi: Windows 10, xampp-windows-x64-7.1.30.30- 5-VC14) mysql file konfigurasi my.ini di akhir
2.- Setelah database lama naik, saya melanjutkan untuk mengeksekusi tabel xxx xxx membuang tablespace untuk setiap tabel dalam database yang ingin saya pulihkan, kemudian file .ibd dari folder data di C: / xampp / mysql / data / system telah dihapus (dalam hal ini jalan ini)
3.- Saya mulai menyalin file .ibd dari database yang ingin saya pulihkan ke folder xampp dari database lama
4.- Setelah file disalin, jalankan: alter table xxx import tablespace Untuk setiap tabel dalam database, peringatan akan muncul tetapi kami akan mengabaikannya, data akan dimuat dalam tabel dan dapat diekspor nanti.
5.- Ekspor seluruh database ke file sql dan lanjutkan untuk membangunnya dalam produksi dan sukses!
Saya harap ini membantu seseorang yang mengalami situasi ini, salam.
Bahasa Inggris disediakan oleh Google
sumber
coba jalankan ini dengan utilitas mysql
perintah / shell promt
sumber