Rumah > Soal Jawab > teks badan
Saya cuba memulihkan pangkalan data dalam PMA tetapi hanya boleh mengakses fail frm dan ibd - bukan fail ib_log yang saya faham anda perlukan.
Saya tahu saya mungkin tidak dapat memulihkan data pangkalan data, tetapi adakah mungkin untuk memulihkan struktur jadual daripada fail frm?
P粉0435663142023-10-20 00:08:59
InnoDB memerlukan fail ib_log untuk pemulihan data, tetapi ia juga memerlukan fail ibdata1, yang mengandungi kamus data dan kadangkala data belum selesai untuk jadual.
Kamus data ialah sistem berulang yang merekodkan struktur jadual dan memadankan ID jadual dengan fail .ibd fizikal yang mengandungi data jadual.
Anda tidak boleh mengalihkan fail .ibd tanpa kamus data InnoDB dan kamus data mesti sepadan dengan ID jadual yang terdapat dalam fail .ibd. Anda bolehmenyambung semula fail .ibd dan memulihkan data, tetapi prosesnya bukan untuk mereka yang lemah hati. Sila rujuk http://www.chriscalender.com/recover jadual innodb daripada fail ibd sahaja/
Anda boleh memulihkan struktur dengan beberapa helah fail menggunakan fail .frm, tetapi anda tidak boleh menciptanya sebagai jadual InnoDB pada mulanya. Berikut ialah blog yang menerangkan cara memulihkan fail .frm ke jadual MyISAM: http://www.percona.com/blog/2008/12/17/recovering-create-table-statement-from-frm-file/" percona.com/blog/2008/12/17/recovering-create- table-statement-from-frm-file/
Anda tidak akan dapat menggunakan PMA untuk ini. Anda memerlukan akses superuser kepada direktori data pada pelayan.
P粉5692054782023-10-20 00:04:57
Saya memulihkan jadual daripada .frm
和 .idb
fail sahaja.
Jika anda sudah mengetahui skema jadual, anda boleh melangkau langkah ini.
Mula-mula, pasang utiliti MySQL.
Anda kemudiannya boleh menggunakan arahan mysqlfrm
dalam Command Prompt (cmd).
Kedua, gunakan arahan mysqlfrm
命令从 .frm
untuk mendapatkan pertanyaan SQL daripada fail .frm
:
mysqlfrm --diagnostic <path>/example_table.frm
Anda kemudiannya boleh mendapatkan pertanyaan SQL untuk mencipta jadual berstruktur yang sama. Seperti ini:
CREATE TABLE `example_table` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(150) NOT NULL, `photo_url` varchar(150) NOT NULL, `password` varchar(600) NOT NULL, `active` smallint(6) NOT NULL, `plan` int(11) NOT NULL, PRIMARY KEY `PRIMARY` (`id`) ) ENGINE=InnoDB;
Buat jadual menggunakan pertanyaan SQL di atas.
Jika data lama masih wujud, anda mungkin perlu memadam pangkalan data dan jadual yang sepadan terlebih dahulu. Pastikan anda mempunyai sandaran fail data anda.
Jalankan pertanyaan ini untuk memadam data jadual baharu:
ALTER TABLE example_table DISCARD TABLESPACE;
Ini akan memadamkan .frm
文件和(新的、空的).idb
文件之间的连接。另外,删除文件夹中的 .idb
fail baharu.
Kemudian, letakkan .idb
fail lama ke dalam folder baharu, contohnya:
cp backup/example_table.ibd <path>/example_table.idb
Pastikan .ibd
文件可以被 mysql
用户读取,例如通过在文件夹中运行 chown -R mysql:mysql *.ibd.
Jalankan pertanyaan ini untuk mengimport data lama:
ALTER TABLE example_table IMPORT TABLESPACE;
Ini akan mengimport data daripada fail .idb
dan akan memulihkan data.