Восстановление структуры таблиц из файлов frm и ibd

#mysql #mamp-pro #laravel-valet

Вопрос:

Я пытаюсь восстановить базу данных в PMA, но у меня есть доступ только к файлам frm и ibd, а не к файлам ib_log, которые, как я понимаю, вам нужны.

Я знаю, что, возможно, мне не удастся восстановить данные базы данных, но возможно ли восстановить структуру таблиц из файлов frm?

Ответ №1:

Я восстановил таблицу только из .frm файлов и .idb файлов.

Получите SQL — запрос для создания таблиц

Если вы уже знаете схему своих таблиц, вы можете пропустить этот шаг.

  1. Во-первых, установите утилиты MySQL. Затем вы можете использовать mysqlfrm команду в командной строке (cmd).
  2. Во-вторых, получите SQL-запросы из .frm файлов с помощью mysqlfrm команды:
     mysqlfrm --diagnostic <path>/example_table.frm
     

Затем вы можете получить SQL-запрос для создания такой же структурированной таблицы.
Подобный этому:

 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;
 

Создайте таблицы

Создайте таблицу(таблицы) с помощью приведенного выше SQL-запроса.

Если старые данные все еще существуют, вам, возможно, придется сначала удалить соответствующую базу данных и таблицы. Убедитесь, что у вас есть резервная копия файлов данных.

Восстановите данные

Выполните этот запрос, чтобы удалить новые данные таблицы:

 ALTER TABLE example_table DISCARD TABLESPACE;
 

Это удаляет соединения между новым .frm файлом и (новым, пустым) .idb файлом. Кроме того, удалите .idb файл в папке.

Затем поместите старый .idb файл в новую папку, например:

 cp backup/example_table.ibd <path>/example_table.idb
 

Убедитесь, что .ibd файлы могут быть прочитаны mysql пользователем, например, запустив chown -R mysql:mysql *.ibd их в папке.

Выполните этот запрос, чтобы импортировать старые данные:

 ALTER TABLE example_table IMPORT TABLESPACE;
 

Это импортирует данные из .idb файла и восстановит данные.

Комментарии:

1. Я попытался это сделать, но при запуске запроса на импорт я получаю следующую ошибку: «#1812 — Для таблицы отсутствует табличное wallipop пространство .. categories »

2. Я исправил это, изменив владельца файла, но теперь я получаю «#1808 — Несоответствие схемы (таблица имеет формат строки ROW_TYPE_DYNAMIC, файл .ibd имеет формат строки ROW_TYPE_COMPACT)».

3. Для всех остальных, кто столкнется с проблемой ROW_TYPE_DYNAMIC, как я только что сделал. Вам придется начать процесс с самого начала, а в инструкции create table добавить ROW_FORMAT=COMPACT после ENGINE=InnoDB , чтобы это выглядело ) ENGINE=InnoDB ROW_FORMAT=COMPACT DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci , например, так. Затем повторите шаги, как обычно, и это должно сработать.

4. эй, пожалуйста, объясните мне, как сделать шаг разрешения/владения в Windows? Убедитесь, что файлы .ibd могут быть прочитаны пользователем mysql, например, запустив chown-R mysql:mysql *.ibd в папке.

5. Если у вас есть тонны файлов .frm ?

Ответ №2:

InnoDB нуждается в файлах ib_log для восстановления данных, но ему также нужен файл ibdata1, который содержит словарь данных и иногда содержит ожидающие данные для таблиц.

Словарь данных-это своего рода дублирующая система, которая записывает структуру таблицы, а также сопоставляет идентификатор таблицы с физическим файлом .ibd, содержащим данные таблицы.

Вы не можете просто перемещать файлы .ibd без словаря данных InnoDB, и словарь данных должен соответствовать идентификатору таблицы, найденному внутри файла .ibd. Вы можете прикрепить файл .ibd и восстановить данные, но эта процедура не для слабонервных. Видишь http://www.chriscalender.com/recovering-an-innodb-table-from-only-an-ibd-file/

Вы можете восстановить структуру с помощью файлов .frm с помощью некоторых хитростей с файлами, но сначала вы не сможете создать их в виде таблиц InnoDB. Вот блог, в котором описан метод восстановления файлов .frm в виде таблиц MyISAM: http://www.percona.com/blog/2008/12/17/recovering-create-table-statement-from-frm-file/

Вы не сможете использовать PMA для этого. Вам нужен доступ суперпользователя к каталогу данных на сервере.

Комментарии:

1. Я хотел бы поддержать способ Питера восстановить структуру из файлов .frm. Просто убедитесь, что версия MySQL ниже 5.6. 5.6 будет жаловаться, что количество столбцов в поддельной таблице меньше, чем в файле frm.

Ответ №3:

Вы можете восстановить структуру таблиц из файлов .frm и данные из файлов ibd.

Использование инструмента mysqlfrm, который является частью утилит MySQL

shell> mysqlfrm --diagnostic myfile.frm

Воссоздайте таблицу в базе данных с тем же именем, используя структуру таблицы.

mysql> CREATE mytable (int i);

Удалите табличное пространство вновь созданной таблицы.

mysql> ALTER TABLE mytable DISCARD TABLESPACE;

Скопируйте файл orphan .idb из каталога резервной копии в новый каталог базы данных. Убедитесь, что файл .ibd имеет необходимые права доступа к файлам.

Импортируйте файл orphan .ibd. Выдается предупреждение, указывающее, что InnoDB попытается импортировать файл без проверки схемы.

mysql> ALTER TABLE r IMPORT TABLESPACE;SHOW WARNINGS;

Ответ №4:

Вы также можете попробовать использовать утилиту mysql.

Из файла book.frm в файл book.sql:

 mysqlfrm --server=root:mysqladmin@localhost:3306 D:yahwehdbyahweh_alterabook.frm > D:yahwehdbyahweh_alterabook.frmbook.sql --diagnostic --port=3307 --user=root
 

Из каталога, содержащего все .файл frm в файл all.sql:

 mysqlfrm --server=root:mysqladmin@localhost:3306 D:yahwehdbyahweh_altera > D:yahwehdbyahweh_alteraall.sql --diagnostic --port=3307 --user=root
 

Ответ №5:

На самом деле это довольно просто, если вы знаете, как это сделать, и не требуется никакого внешнего программного обеспечения или команд оболочки.

Данные базы данных хранятся в C:xamppmysqldata или аналогично по умолчанию. Папки — это таблицы базы данных. Внутри каждой папки в файле .frm находятся столбцы. .ibd содержит значения строк.

Сначала создайте базу данных(базы данных) в phpMyAdmin.

Получите SQL-запрос, сгенерированный с этого сайта, в меню Восстановить структуру > Из файла .frm:

https://recovery.twindb.com/

Загрузите каждый файл .frm, а затем скопируйте и вставьте эти запросы в команду SQL для создания таблиц в phpMyAdmin.

Затем для каждой таблицы выполните этот SQL-запрос:

 ALTER TABLE table_name DISCARD TABLESPACE
 

Это автоматически удалит новый файл .ibd из каталога базы данных.
Скопируйте старый файл .ibd в папку базы данных.
Выполните следующую команду, чтобы снова активировать таблицу:

 ALTER TABLE table_name IMPORT TABLESPACE
 

И это все! Вы должны иметь возможность снова просматривать и получать доступ ко всем своим старым значениям.

Комментарии:

1. почему сайт не открывается?