Meskipun saya menjawab ini, itu benar-benar milik Serverfault.
derobert
31
@chandrajeet Anda harus benar-benar menerima jawaban yang paling banyak dipilih.
Menara
2
Hei chandrajeet, mengapa Anda tidak menerima jawaban derobert? Saya mengkonfirmasi itu juga berfungsi untuk saya. Bukan untukmu? stackoverflow.com/help/someone-answers
Taz
Jawaban:
173
Jika ini adalah tabel MyISAM, maka memasukkan file .FRM, .MYD, dan .MYI ke direktori database (mis., /var/lib/mysql/dbname) Akan membuat tabel itu tersedia. Tidak harus database yang sama dengan asalnya, server yang sama, versi MySQL yang sama, atau arsitektur yang sama. Anda juga mungkin perlu mengubah kepemilikan untuk folder tersebut (misalnya, chown -R mysql:mysql /var/lib/mysql/dbname)
Perhatikan bahwa izin ( GRANT, dll.) Adalah bagian dari mysqldatabase. Jadi mereka tidak akan dipulihkan bersama dengan tabel; Anda mungkin perlu menjalankan GRANTpernyataan yang sesuai untuk membuat pengguna, memberikan akses, dll. (Memulihkan mysqlbasis data dimungkinkan, tetapi Anda harus berhati-hati dengan versi MySQL dan setiap menjalankan mysql_upgradeutilitas yang diperlukan.)
Sebenarnya, Anda mungkin hanya perlu .FRM (struktur tabel) dan .MYD (data tabel), tetapi Anda harus memperbaiki tabel untuk membangun kembali .MYI (indeks).
Satu-satunya kendala adalah bahwa jika Anda menurunkan versi, sebaiknya Anda memeriksa catatan rilis (dan mungkin menjalankan tabel perbaikan). Versi MySQL yang lebih baru menambahkan fitur, tentu saja.
[Meskipun harus jelas, jika Anda mencampur dan mencocokkan tabel, integritas hubungan antara tabel tersebut adalah masalah Anda; MySQL tidak akan peduli, tetapi aplikasi Anda dan pengguna Anda mungkin. Juga, metode ini tidak bekerja sama sekali untuk tabel InnoDB. Hanya MyISAM, tetapi mengingat file yang Anda miliki, Anda memiliki MyISAM]
Apakah ini benar-benar berfungsi tanpa menambahkan entri yang sesuai ke tabel information_schema? Maksud saya MySQL perlu tahu untuk mencari file-file ini bukan?
Wow, saya merasa kotor, tetapi menjatuhkan seluruh direktori dari apa yang saya pikir adalah menginstal MySQL4 ke MySQL5.1 saya secara ajaib menciptakan kembali tabel. Tidak me-restart atau apapun (di windows).
Dave
4
Ini bekerja, Anda hanya perlu mengingat untuk menjalankan (untuk setiap tabel): check table sometable; dan kemudian menjalankan perbaikan (hanya jika diperlukan): repair table sometable;
Nux
3
Ini bekerja dengan baik! Saya telah meletakkan file di tempatnya, tetapi mysql tidak "melihat" mereka sampai saya mengubah kepemilikan menjadi "mysql: mysql".
sean.boyer
26
Perhatikan bahwa jika Anda ingin membangun kembali file MYI maka penggunaan REPAIR TABLE yang benar adalah:
REPAIR TABLE USE_FRM yang mungkin;
Kalau tidak, Anda mungkin hanya akan mendapatkan kesalahan lain.
Ikuti langkah-langkah ini (setelah semuanya gagal) dan gunakan innodb_force_recovery = 4level (tidak yakin itu diperlukan dalam kasus ini). Untunglah!
Joshua Stewardson
6
FYI: ibdata1InnoDB, bukan MyISAM.
derobert
14
Satu hal yang perlu diperhatikan:
File .FRM memiliki struktur tabel di dalamnya, dan khusus untuk versi MySQL Anda.
File .MYD TIDAK spesifik untuk versi, setidaknya bukan versi minor.
File .MYI spesifik, tetapi dapat ditinggalkan dan dibuat kembali dengan REPAIR TABLEseperti jawaban lainnya.
Inti dari jawaban ini adalah untuk memberi tahu Anda bahwa jika Anda memiliki skema penumpahan tabel Anda, maka Anda dapat menggunakannya untuk menghasilkan struktur tabel, lalu ganti file .MYD tersebut dengan cadangan Anda, hapus file MYI, dan perbaiki mereka semua. Dengan cara ini Anda dapat mengembalikan cadangan ke versi MySQL lain, atau memindahkan basis data Anda sama sekali tanpa menggunakan mysqldump. Saya menemukan ini sangat membantu ketika memindahkan basis data besar.
Cara terbaik untuk memulihkan data ... Saya menginstal WAMP, lalu membuat database baru, menyalin file di direktori database baru C: \ WAMP64 \ bin \ mysql \ mysqlxx \ data \ newdatabase buka phpmyadmin dan database baru Anda, Anda akan lihat data
Alexandre georges
7
Saya pikir .myi Anda dapat memperbaiki dari dalam mysql.
Jika Anda melihat jenis pesan kesalahan ini dari MySQL: Database gagal menjalankan query (query) 1016: Tidak dapat membuka file: 'sometable.MYI'. (errno: 145) Kesalahan Msg: 1034: File kunci untuk tabel salah: 'kadang-kadang'. Cobalah untuk memperbaikinya maka Anda mungkin memiliki tabel rusak atau rusak.
Anda dapat memeriksa dan memperbaiki tabel dari prompt mysql seperti ini:
checktable sometable;+------------------+-------+----------+----------------------------+|Table| Op | Msg_type | Msg_text |+------------------+-------+----------+----------------------------+ | yourdb.sometable |check| warning |Tableis marked as crashed || yourdb.sometable |check| status | OK |+------------------+-------+----------+----------------------------+
repair table sometable;+------------------+--------+----------+----------+ |Table| Op | Msg_type | Msg_text |+------------------+--------+----------+----------+ | yourdb.sometable | repair | status | OK |+------------------+--------+----------+----------+
dan sekarang meja Anda harus baik-baik saja:
checktable sometable;+------------------+-------+----------+----------+ |Table| Op | Msg_type | Msg_text |+------------------+-------+----------+----------+ | yourdb.sometable |check| status | OK |+------------------+-------+----------+----------+
Saya menemukan solusi untuk mengkonversi file ke .sqlfile (Anda kemudian dapat mengimpor .sqlfile ke server dan memulihkan database), tanpa perlu mengakses /vardirektori, oleh karena itu Anda tidak perlu menjadi admin server untuk melakukan ini.
Itu memang membutuhkan XAMPP atau MAMP yang diinstal pada komputer Anda.
Setelah Anda menginstal XAMPP, navigasikan ke direktori instal (Biasanya C:\XAMPP), dan sub-direktori mysql\data. Jalan penuh seharusnyaC:\XAMPP\mysql\data
Di dalam Anda akan melihat folder dari database lain yang telah Anda buat. Salin & Tempel folder yang penuh .myd, .myidan .frmfile ke sana. Path ke folder itu seharusnya
C:\XAMPP\mysql\data\foldername\.mydfiles
Kemudian kunjungi localhost/phpmyadmindi browser. Pilih database yang baru saja Anda tempelkan ke mysql\datafolder, dan klik Ekspor di bilah navigasi. Pilih ekspor sebagai .sqlfile. Maka akan muncul menanyakan di mana menyimpan file
Dan itu dia! Anda (seharusnya) sekarang memiliki .sqlfile yang berisi database yang awalnya .myd, .myidan .frmfile. Anda kemudian dapat mengimpornya ke server lain melalui phpMyAdmin dengan membuat database baru dan menekan 'Impor' di bilah navigasi, kemudian ikuti langkah-langkah untuk mengimpornya
Anda dapat menyalin file ke direktori subdirektori bernama folder data selama itu adalah versi yang sama persis dari mySQL dan Anda telah mempertahankan semua file terkait di direktori itu. Jika Anda tidak memiliki semua file, saya yakin Anda akan memiliki masalah.
Deskripsi di atas tidak cukup untuk membuat hal-hal bekerja untuk saya (mungkin padat atau malas) jadi saya membuat skrip ini setelah saya menemukan jawaban untuk membantu saya di masa depan. Semoga ini bisa membantu orang lain
vim fixperms.sh
#!/bin/sh
for D in`find .-type d`
do
echo $D;
chown -R mysql:mysql $D;
chmod -R 660$D;
chown mysql:mysql $D;
chmod 700$D;
done
echo Dont forget to restart mysql:/etc/init.d/mysqld restart;
Bagi mereka yang memiliki Windows XP dan MySQL server 5.5 diinstal - lokasi untuk database adalah C: \ Documents and Settings \ All Users \ Data Aplikasi \ MySQL \ MySQL Server 5.5 \ data, kecuali jika Anda mengubah lokasi dalam instalasi MySql Workbench GUI.
Jawaban:
Jika ini adalah tabel MyISAM, maka memasukkan file .FRM, .MYD, dan .MYI ke direktori database (mis.,
/var/lib/mysql/dbname
) Akan membuat tabel itu tersedia. Tidak harus database yang sama dengan asalnya, server yang sama, versi MySQL yang sama, atau arsitektur yang sama. Anda juga mungkin perlu mengubah kepemilikan untuk folder tersebut (misalnya,chown -R mysql:mysql /var/lib/mysql/dbname
)Perhatikan bahwa izin (
GRANT
, dll.) Adalah bagian darimysql
database. Jadi mereka tidak akan dipulihkan bersama dengan tabel; Anda mungkin perlu menjalankanGRANT
pernyataan yang sesuai untuk membuat pengguna, memberikan akses, dll. (Memulihkanmysql
basis data dimungkinkan, tetapi Anda harus berhati-hati dengan versi MySQL dan setiap menjalankanmysql_upgrade
utilitas yang diperlukan.)Sebenarnya, Anda mungkin hanya perlu .FRM (struktur tabel) dan .MYD (data tabel), tetapi Anda harus memperbaiki tabel untuk membangun kembali .MYI (indeks).
Satu-satunya kendala adalah bahwa jika Anda menurunkan versi, sebaiknya Anda memeriksa catatan rilis (dan mungkin menjalankan tabel perbaikan). Versi MySQL yang lebih baru menambahkan fitur, tentu saja.
[Meskipun harus jelas, jika Anda mencampur dan mencocokkan tabel, integritas hubungan antara tabel tersebut adalah masalah Anda; MySQL tidak akan peduli, tetapi aplikasi Anda dan pengguna Anda mungkin. Juga, metode ini tidak bekerja sama sekali untuk tabel InnoDB. Hanya MyISAM, tetapi mengingat file yang Anda miliki, Anda memiliki MyISAM]
sumber
check table sometable;
dan kemudian menjalankan perbaikan (hanya jika diperlukan):repair table sometable;
Perhatikan bahwa jika Anda ingin membangun kembali file MYI maka penggunaan REPAIR TABLE yang benar adalah:
REPAIR TABLE USE_FRM yang mungkin;
Kalau tidak, Anda mungkin hanya akan mendapatkan kesalahan lain.
sumber
Saya baru saja menemukan solusi untuk ini. Saya menggunakan MySQL 5.1 atau 5.6 pada Windows 7.
Tidak perlu menemukan file .MYI dan .MYD untuk pemulihan ini.
sumber
innodb_force_recovery = 4
level (tidak yakin itu diperlukan dalam kasus ini). Untunglah!ibdata1
InnoDB, bukan MyISAM.Satu hal yang perlu diperhatikan:
File .FRM memiliki struktur tabel di dalamnya, dan khusus untuk versi MySQL Anda.
File .MYD TIDAK spesifik untuk versi, setidaknya bukan versi minor.
File .MYI spesifik, tetapi dapat ditinggalkan dan dibuat kembali dengan
REPAIR TABLE
seperti jawaban lainnya.Inti dari jawaban ini adalah untuk memberi tahu Anda bahwa jika Anda memiliki skema penumpahan tabel Anda, maka Anda dapat menggunakannya untuk menghasilkan struktur tabel, lalu ganti file .MYD tersebut dengan cadangan Anda, hapus file MYI, dan perbaiki mereka semua. Dengan cara ini Anda dapat mengembalikan cadangan ke versi MySQL lain, atau memindahkan basis data Anda sama sekali tanpa menggunakan
mysqldump
. Saya menemukan ini sangat membantu ketika memindahkan basis data besar.sumber
Sederhana! Buat basis data dummy (mis. Abc)
Salin semua file .myd, .myi, .frm ini ke mysql \ data \ abc dimana mysql \ data \ adalah tempat penyimpanan .myd, .myi, .frm untuk semua basis data.
Lalu pergi ke phpMyadmin, pergi ke db abc dan Anda menemukan database Anda.
sumber
Saya pikir .myi Anda dapat memperbaiki dari dalam mysql.
Jika Anda melihat jenis pesan kesalahan ini dari MySQL: Database gagal menjalankan query (query) 1016: Tidak dapat membuka file: 'sometable.MYI'. (errno: 145) Kesalahan Msg: 1034: File kunci untuk tabel salah: 'kadang-kadang'. Cobalah untuk memperbaikinya maka Anda mungkin memiliki tabel rusak atau rusak.
Anda dapat memeriksa dan memperbaiki tabel dari prompt mysql seperti ini:
dan sekarang meja Anda harus baik-baik saja:
sumber
Saya menemukan solusi untuk mengkonversi file ke
.sql
file (Anda kemudian dapat mengimpor.sql
file ke server dan memulihkan database), tanpa perlu mengakses/var
direktori, oleh karena itu Anda tidak perlu menjadi admin server untuk melakukan ini.Itu memang membutuhkan XAMPP atau MAMP yang diinstal pada komputer Anda.
C:\XAMPP
), dan sub-direktorimysql\data
. Jalan penuh seharusnyaC:\XAMPP\mysql\data
Di dalam Anda akan melihat folder dari database lain yang telah Anda buat. Salin & Tempel folder yang penuh
.myd
,.myi
dan.frm
file ke sana. Path ke folder itu seharusnyaC:\XAMPP\mysql\data\foldername\.mydfiles
Kemudian kunjungi
localhost/phpmyadmin
di browser. Pilih database yang baru saja Anda tempelkan kemysql\data
folder, dan klik Ekspor di bilah navigasi. Pilih ekspor sebagai.sql
file. Maka akan muncul menanyakan di mana menyimpan fileDan itu dia! Anda (seharusnya) sekarang memiliki
.sql
file yang berisi database yang awalnya.myd
,.myi
dan.frm
file. Anda kemudian dapat mengimpornya ke server lain melalui phpMyAdmin dengan membuat database baru dan menekan 'Impor' di bilah navigasi, kemudian ikuti langkah-langkah untuk mengimpornyasumber
Anda dapat menyalin file ke direktori subdirektori bernama folder data selama itu adalah versi yang sama persis dari mySQL dan Anda telah mempertahankan semua file terkait di direktori itu. Jika Anda tidak memiliki semua file, saya yakin Anda akan memiliki masalah.
sumber
http://forums.devshed.com/mysql-help-4/mysql-installation-problems-197509.html
Dikatakan untuk mengganti nama file ib_ *. Saya telah melakukannya dan itu memberi saya kembali db.
sumber
Deskripsi di atas tidak cukup untuk membuat hal-hal bekerja untuk saya (mungkin padat atau malas) jadi saya membuat skrip ini setelah saya menemukan jawaban untuk membantu saya di masa depan. Semoga ini bisa membantu orang lain
sumber
Bagi mereka yang memiliki Windows XP dan MySQL server 5.5 diinstal - lokasi untuk database adalah C: \ Documents and Settings \ All Users \ Data Aplikasi \ MySQL \ MySQL Server 5.5 \ data, kecuali jika Anda mengubah lokasi dalam instalasi MySql Workbench GUI.
sumber