Поиск по сайту:
Равенство существует только в гробу (К. Колтон).

Как восстановить данные таблицы MySQL InnoDB из файлов ibdata и .frm

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
03.08.2018
Как восстановить данные таблицы MySQL InnoDB из файлов ibdata и .frm

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

Одна из причин этого — когда данные таблицы повреждены.

В этом конкретном случае, когда вы подключаетесь к серверу базы данных MySQL, вы не видите других таблиц, поскольку они отсутствуют.

В этом сценарии в файле журнала MySQL содержались следующие сообщения:

InnoDB: Error: log file ./ib_logfile0 is of different size 0 46447478 bytes
InnoDB: than specified in the .cnf file 0 5242880 bytes!
[ERROR] Plugin 'InnoDB' init function returned error.
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[ERROR] Unknown/unsupported storage engine: InnoDB
[ERROR] Aborting

 

Метод, описанный ниже, будет работать только для базы данных InnoDB.

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

Чтобы восстановить данные таблицы, убедитесь, что каталог данных и его содержимое не повреждены. В моем случае это было хорошо.

drwx------ 2 mysql mysql     4096 Oct 14  2017 performance_schema
drwx------ 2 mysql mysql     4096 Dec 12  2017 ndbinfo
drwx--x--x 2 mysql mysql     4096 Dec 12  2017 mysql
-rw-rw---- 1 mysql mysql       56 Dec 15  2017 auto.cnf
drwx------ 2 mysql mysql     4096 Jul 02  2018 bugs
-rw-r----- 1 mysql mysql 46447478 Mar 24 12:22 ib_logfile0
-rw-r----- 1 mysql mysql 46447478 Apr 07  2018 ib_logfile1
-rw-r----- 1 mysql mysql 37954786 Mar 12 12:22 ibdata1
..
  • Ibdata1 — этот файл представляет собой системное табличное пространство InnoDB, которое содержит несколько таблиц InnoDB и связанных индексов.
  • * .frm — хранит информацию метаданных для всех таблиц MySQL. Эти файлы находятся внутри папки соответствующей базы данных MySQL. (например, внутри каталога «bugs»)
  • ib_logfile * — Все изменения данных записываются в эти файлы журналов. Это похоже на концепции архивных журналов, которые мы находим в других СУБД.

Скопировать файлы

Чтобы восстановить данные из вышеуказанных файлов, сначала остановите сервер MySQL.

# service mysqld stop

 

Скопируйте файлы ibdata и папку схемы базы данных в другой каталог. Мы будем использовать это для восстановления нашей базы данных MySQL. В этом случае мы скопируем его в каталог /tmp. Имя схемы базы данных в этом примере — это ошибки.

cp –r ibdata* ib_logfile* /tmp

cp –r schema_name/  /tmp/schema_name/

 

Запустите сервер MySQL:

# service mysqld start

 

В соответствующей заметке для типичной резервной копии и восстановления базы данных MySQL вы должны использовать команду mysqldump.

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

Затем восстановите данные таблицы, как описано ниже.

В файле конфигурации my.cnf установите значение следующего параметра в текущий размер файла ib_logfile0. В следующем примере я установил его на 48M, так как это размер, который мы видим для файла ib_logfile0, когда делали «ls -lh ib_logfile0»,

innodb_log_file_size=48M

 

Обратите внимание, что размер файла ib_logfile0 и ib_logfile1 будет таким же.

Скопируйте предыдущие файлы ibdata в соответствующую позицию, в каталог данных mysql.

cp –r /tmp/ibdata* /var/lib/mysql/

 

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

cp –r /tmp/ib_logfile* /var/lib/mysql/
cp –r /tmp/schema_name/*.frm /var/lib/mysql/schema_name/

 

Наконец, перезапустите сервер MySQL.

service mysqld restart

 

Теперь у вас есть сервер MySQL, работающий с восстановленными таблицами. Не забудьте предоставить соответствующие привилегии клиентам для подключения к базе данных MySQL.

 

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Если статья понравилась, то поделитесь ей в социальных сетях:

Читайте также

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Спасибо!

Теперь редакторы в курсе.