Восстановить данные таблицы MYSQL с помощью файлов ibd или frm [duplicate]

Сегодня

Lookbehind теперь является официальной частью спецификации ES 2018 .

История

Похоже, в то время Брендан Эйх не знал о том, что его существование (потому что Netscape был построен на более старой версии Perl):

Это было в 1998 году, работа Netscape 4, которую я делала в '97, была основана на Perl 4 (!), но мы предложили ECMA TC39 TG1 (группа JS - все было иначе, включая капитализацию), что-то основано на Perl 5. Мы не получили все, и нам пришлось рационализировать некоторые очевидные причуды.

Я не помню, как lookbehind (появившийся в Perl 5.005 в июле 98 года) был специально выделен. Waldemar может вспомнить больше, я передал ему ключи JS внутри netscape.com, чтобы пойти на mozilla.org.

Если вы играете, чтобы написать предложение или мини-спецификацию (в стиле ES5 даже ), дай мне знать.

/ be

blockquote>

В списке рассылки было множество разных элементов с попытками включить его , но он по-прежнему представляется довольно сложной особенностью, потому что EcmaScript Regular Expressions - это backtracking , а backtracking необходим в lookbehind при работе с группами захвата. Это может привести к таким проблемам, как катастрофическое обратное отслеживание при неправильном использовании.

В какой-то момент это было предложено для ES6 / Es 2015, но оно никогда не делало проект, не говоря уже о спецификации , В последнем выпуске в обсуждении кажется, что никто не взял на себя задачу его реализации. Если кто-то чувствует себя призванным для написания реализации, они могут зарегистрироваться для ES Обсудить список и предложить его.

Обновление до 2015 года:

В мае 2015 года , Nozomu Katō предложил реалистичную реализацию ES7 .

Обновление сентябрь 2015:

Regex Look-behind был добавлен как этап 0 Предложение .

Обновление мая 2017 года:

Предложение находится на этапе 3 . Это означает, что теперь по крайней мере два браузера должны реализовать его, чтобы он стал частью следующего стандарта EcmaScript. Как отметил @martixy в комментариях, Chrome реализовал его за экспериментальным флагом JS .

3
задан Dan Leach 11 November 2014 в 16:56
поделиться

4 ответа

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 для этого. Вам нужен доступ суперпользователя к каталогу данных на сервере.

4
ответ дан Bill Karwin 22 August 2018 в 14:18
поделиться
  • 1
    Я бы хотел, чтобы второй способ Питера восстановить структуру из файлов .frm. Просто убедитесь, что версия MySQL ниже 5.6. 5.6 будет жаловаться на количество столбцов в поддельной таблице меньше, чем в файле frm. – akuzminsky 11 November 2014 в 20:09

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

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

shell> mysqlfrm --diagnostic myfile.frm

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

mysql> CREATE mytable (int i);

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

mysql> ALTER TABLE mytable DISCARD TABLESPACE;

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

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

mysql> ALTER TABLE r IMPORT TABLESPACE;SHOW WARNINGS;

1
ответ дан igorsf 22 August 2018 в 14:18
поделиться

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

  1. Сначала я установил MySQL Utilities на свой ноутбук. Затем вы можете использовать команду mysqlfrm в командной строке (cmd).
  2. Во-вторых, я получил sql-запросы из .frm файлов, используя команду mysqlfrm в cmd.

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.

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

ALTER TABLE example_table DISCARD TABLESPACE;

Удаленные соединения между новым файлом .frm и .idb , Также удален файл .idb в папке.

  1. В-четвертых, я поместил старый файл .idb в новую папку. И я запускал этот запрос для импорта старых данных.

ALTER TABLE example_table IMPORT TABLESPACE;

Это импортированные данные из файла .idb и, наконец, я восстановленная старая таблица данных. Я уверен, что это вам поможет.

Спасибо.

11
ответ дан Jin Lin 22 August 2018 в 14:18
поделиться
1
ответ дан Marcus Edensky 5 November 2018 в 12:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: