Відновлення бази даних MySQL з папки даних без ibdata1 з файлів ibd


15

Мій каталог WAMP випадково видалено іншим користувачем. Доступна лише папка даних у MySQL. І в цьому доступні лише папки баз даних (папки в "\ bin \ mysql \ mysql5.6.12 \ data \" з назвою баз даних). Усі файли, включаючи " ibdata1 " у корені "\ bin \ mysql \ mysql5.6.12 \ data \", також видаляються.

Папки бази даних містять файли лише з розширеннями нижче.

* .frm, * .ibd

і "db.opt" файл.

Як можна відновити бази даних?

Я вже намагався відновити bdata1. Але, не в змозі повернути це. І деякі бази даних також містять MYISAM.

Відповіді:


16

MyISAM

Для таблиці MyISAM mydb.mytable у вас повинно бути три файли

  • \bin\mysql\mysql5.6.12\data\mydb\mytable.frm
  • \bin\mysql\mysql5.6.12\data\mydb\mytable.MYD
  • \bin\mysql\mysql5.6.12\data\mydb\mytable.MYI

Вони вже повинні бути доступними у вигляді таблиці, оскільки кожен файл містить необхідні дані, метадані та інформацію про індекс. У сукупності вони формують таблицю. Немає жодних механізмів зовнішнього зберігання для доступу.

InnoDB

Погляньте на це живописне представлення InnoDB

Архітектура InnoDB

Єдине, що додає ibdata1 до .ibdфайлів, - це словник даних.

Ваша місія, якщо ви вирішите її прийняти, - це створити кожну таблицю і поміняти місцями .ibd

Перш ніж робити щось, зробіть повну копію "\ bin \ mysql \ mysql5.6.12 \ даних" до іншого

Ось зразок

Припустимо, у вас є база даних mydbз таблицею mytable. Це означає

  • У вас папка \bin\mysql\mysql5.6.12\data\mydb
  • Всередині цієї папки у вас є
    • mytable.frm
    • mytable.ibd

Вам потрібна .frm. Якщо ви подивитесь на мій пост Як можна отримати схему таблиці лише з файлу .frm? , ви можете завантажити утиліту MySQL, яка може генерувати SQL, необхідний для створення таблиці.

Тепер вам слід зробити наступне

  • Перейти mytable.ibdдо\bin\mysql\mysql5.6.12\data
  • Запустіть SQL, щоб створити таблицю InnoDB
  • Увійдіть до mysql та запустіть ALTER TABLE mydb.mytable DISCARD TABLESPACE;(це буде видалено \bin\mysql\mysql5.6.12\data\mydb\mytable.ibd)
  • Скопіюйте \bin\mysql\mysql5.6.12\data\mytable.ibdв\bin\mysql\mysql5.6.12\data\mydb
  • Увійдіть до mysql та запустіть ALTER TABLE mydb.mytable IMPORT TABLESPACE;(це зареєструється \bin\mysql\mysql5.6.12\data\mydb\mytable.ibdу словнику даних)

Після цього стіл mydb.mytableповинен бути повністю доступним. Ви можете перевірити цю доступність, просто запустивши:

SELECT * FROM mydb.mytable LIMIT 10;

Спробувати !!!

DRINK (Відновлення даних включає необхідні знання) відповідально


Щоб виконати цю чудову відповідь, для innodb вам потрібно буде видалити будь-яке обмеження FK, яке посилається на таблицю, перш ніж відкинути її простір таблиць. Після імпорту слід відтворити FK.
SebaGra

після імпорту простору information_schema.key_column_usageтаблиць (ймовірно, і інші таблиці) не буде повернено жодних даних по першій, selectтому вам доведеться виконати принаймні один запит і зачекати кілька секунд, перш ніж наступний запит може працювати. (mysql Ver 14.14 Distrib 5.7.19, для linux-glibc2.12 (x86_64), використовуючи обгортку EditLine)
користувач3338098
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.