#mysql #mamp-pro #laravel-valet
Вопрос:
Я пытаюсь восстановить базу данных в PMA, но у меня есть доступ только к файлам frm и ibd, а не к файлам ib_log, которые, как я понимаю, вам нужны.
Я знаю, что, возможно, мне не удастся восстановить данные базы данных, но возможно ли восстановить структуру таблиц из файлов frm?
Ответ №1:
Я восстановил таблицу только из .frm
файлов и .idb
файлов.
Получите SQL — запрос для создания таблиц
Если вы уже знаете схему своих таблиц, вы можете пропустить этот шаг.
- Во-первых, установите утилиты MySQL. Затем вы можете использовать
mysqlfrm
команду в командной строке (cmd). - Во-вторых, получите 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:
Загрузите каждый файл .frm, а затем скопируйте и вставьте эти запросы в команду SQL для создания таблиц в phpMyAdmin.
Затем для каждой таблицы выполните этот SQL-запрос:
ALTER TABLE table_name DISCARD TABLESPACE
Это автоматически удалит новый файл .ibd из каталога базы данных.
Скопируйте старый файл .ibd в папку базы данных.
Выполните следующую команду, чтобы снова активировать таблицу:
ALTER TABLE table_name IMPORT TABLESPACE
И это все! Вы должны иметь возможность снова просматривать и получать доступ ко всем своим старым значениям.
Комментарии:
1. почему сайт не открывается?