Я работал с базой данных mysql innodb. Когда я работал с mysqlworkbench, случайно все файлы .frm были удалены из папки данных mysql, но у меня все еще есть файл ibdata в папке данных. Я не использовал innodb_file_per_table, что означает, что все данные моих таблиц innodb были в одном файле ibdata.
К сожалению, у меня нет резервной копии для восстановления. Может ли кто-нибудь предложить мне, как восстановить данные из файла ibdata.
Ваш вопрос кажется идентичным этот в Stack Overflow.
Я воспроизвел здесь часть принятого ответа.
Простое решение - найти сохраненную копию
CREATE TABLE
SQL, запустите его на развитие экземпляр MySQL, затем скопируйте сгенерированный файл FRM в восстановленный экземпляр.Если у вас нет доступа к
CREATE TABLE
операторы вы можете попробовать следующее:
- В восстановленной базе данных запустите
create table innodb_table_monitor (a int) ENGINE=InnoDB
- Следите за файлом ошибок сервера MySQL, пока данные монитора таблицы не будут сброшены (обычно около минуты)
- Бегать
drop table innodb_table_monitor
Остановить восстановленную базу данных
Напишите SQL для соответствия выводам монитора таблицы, например:
TABLE: name db/mylosttable, id 0 7872, flags 1, columns 5, indexes 1, appr.rows 1828 COLUMNS: id: DATA_MYSQL DATA_NOT_NULL len 12; name: type 12 DATA_NOT_NULL len 45; DB_ROW_ID: DATA_SYS prtype 256 len 6; DB_TRX_ID: DATA_SYS prtype 257 len 6; DB_ROLL_PTR: DATA_SYS prtype 258 len 7; INDEX: name GEN_CLUST_INDEX, id 0 17508, fields 0/5, uniq 1, type 1 root page 3, appr.key vals 1828, leaf pages 9, size pages 10 FIELDS: DB_ROW_ID DB_TRX_ID DB_ROLL_PTR id name
можно выразить как:
drop table if exists mylosttable; create table mylosttable ( id char(12) NOT NULL, name varchar(45) NOT NULL );
Если вас смущает вывод монитора таблиц, посмотрите на вывод таблиц с известной схемой.
Запустите указанный выше SQL на развитие экземпляр MySQL
Скопируйте файлы FRM, созданные на сервере разработки, в восстановленную базу данных. Вы найдете их в каталоге данных MySQL в подкаталоге соответствующей базы данных.
Перезагрузите восстановленную базу данных
Обратите внимание, что вы можете скопировать файлы FRM из своей системы разработки в действующий экземпляр базы данных. Причина остановки указанного выше сервера заключается в том, что если вы завершите работу базы данных после создания таблицы innodb_table_monitor, она оставит файл ibdata в несогласованном состоянии, и вам придется начинать заново с резервной копии.
Проверьте, что таблицы работают, используя
select *
заявления. Если вы ошиблись, вы увидите:ERROR 2013 (HY000): Lost connection to MySQL server during query
что означает сбой базы данных. Если это произойдет, сделайте
create table innodb_table_monitor...
на экземпляре dev и сравните вывод с исходным выводом восстановленного экземпляра. Вы, вероятно, увидите, что пропустили NOT NULL или что-то в этом роде.