Восстановление базы данных mysql innodb ‘таблица не существует’

Вопрос или проблема

Наш сервер вылетел на прошлой неделе, и мы потеряли много информации. Нам удалось восстановить файлы .frm для таблиц, ib_logfile0, ib_logfile1 и ibdata1, но нет .ibd.

Я пробовал innodb-force-recovery на всех уровнях от 1 до 6 и множество других «решений», которые нашел в интернете, без какого-либо успеха.

Сейчас я пытался сделать это через mysqldump и restore базы данных, но столкнулся с той же проблемой, что и Матвей здесь.

этот ответ выглядит так, будто он может сработать. Моя проблема в том, что, во-первых, мой сервер на Windows, во-вторых, у меня недостаточно знаний и навыков, чтобы применить это в командной строке Windows.

Случайно есть ли аналогичное решение для Windows?

правка

Мы не использовали innodb_file_per_table, поэтому все данные должны храниться в ibdata1.

Этот пост на форуме MySQL выглядит как история успеха, хотя и немного старая. Я помню свою аналогичную историю на Linux. Платформа Windows здесь не важна, структура файлов данных MySQL похожа. На самом деле никаких командных работ не требуется. Я предполагаю, что ваш файл Ibdata не поврежден.

Насколько я знаю, вам вообще не нужны файлы ib_logfile?, что подтверждается в форуме. Ключевые операции здесь:

  1. новая установка MySQL (используйте ту же версию);
  2. ручное воссоздание идентично-названных баз данных, можно сделать из последнего резервного дампа, если он у вас есть;
  3. отключение innodb_file_per_table в my.cnf, лучше восстановить старую конфигурацию;
  4. замена Ibdata в новой установке на восстановленный.

После того как вы запустите MySQL, вы должны иметь возможность просматривать и дампить ваши данные из таблиц InnoDB.

Ответ или решение

Восстановление базы данных MySQL InnoDB: «Таблица не существует»

В вашей ситуации с восстановлением базы данных MySQL InnoDB, где произошло повреждение сервера и пропали данные, важно следовать упорядоченному процессу для минимизации потерь. Рассмотрим пошаговое руководство по восстановлению в случае, если у вас есть файлы .frm, ib_logfile0, ib_logfile1 и ibdata1, но нет .ibd.

Шаг 1: Установка нового экземпляра MySQL

Первое, что вам нужно сделать, – это установить ту же версию MySQL, которая использовалась ранее. Для этого:

  1. Загрузите инсталляционный пакет MySQL с официального сайта (mysql.com) и установите его. Убедитесь, что выбрана версия, соответствующая вашей ранее использовавшейся версии.

Шаг 2: Восстановление структуры баз данных

Предполагая, что у вас нет последней резервной копии, выполните следующие действия:

  1. Создайте базу данных с точно таким же именем, как и у вас была ранее.
  2. Для каждой из утерянных таблиц создайте пустые таблицы путем их повторного создания. Файлы .frm могут быть использованы для восстановления структуры таблиц, если они соответствуют предыдущему определению.

Если у вас есть дамп базы данных, будет проще создать базу данных и загрузить данные обратно.

Шаг 3: Настройки конфигурации

Перед тем, как проводить любые операции с данными, убедитесь, что настройки MySQL соответствуют вашим требованиям:

  1. Откройте файл конфигурации MySQL (обычно my.ini для Windows).
  2. Убедитесь, что innodb_file_per_table отключено, чтобы данные таблиц находились в ibdata1, как это было настроено ранее.
  3. При необходимости добавьте следующие параметры:

    [mysqld]
    innodb_force_recovery = 1  # Это может варьироваться до 6 в зависимости от ситуации

Шаг 4: Замена файла ibdata1

Теперь, когда у вас настроена новая установка, выполните следующие шаги:

  1. Остановите MySQL сервер через интерфейс Windows или используя команду net stop mysql в командной строке.
  2. Перейдите в каталог данных MySQL, который обычно находится по пути C:\ProgramData\MySQL\MySQL Server X.X\data.
  3. Замените существующий файл ibdata1 на тот, который вы восстановили.
  4. Скопируйте также файлы .frm в соответствующую папку для каждой таблицы.

Шаг 5: Запуск MySQL и проверка

После замены файлов выполните следующие действия:

  1. Запустите MySQL сервер через интерфейс или с помощью команды net start mysql.
  2. Подключитесь к серверу MySQL через клиент, например, MySQL Workbench или командную строку.
  3. Проверьте, видны ли восстановленные таблицы с помощью команды:

    SHOW TABLES FROM имя_вашей_базы_данных;

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

Последующие действия и рекомендации

  1. Если на этом этапе вы столкнетесь с ошибками, из-за которых данные не отображаются, попробуйте увеличить innodb_force_recovery до 6 и повторите попытку.
  2. Сделайте резервные копии восстановленных данных для предотвращения потерь в будущем.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...