Как восстановить базу данных MySQL, используя файлы в папке данных?

Как восстановить базу данных MySQL, используя файлы в папке данных?

Я не могу запустить mysql со вчерашнего дня и не могу получить к нему доступ, поэтому я решил переустановить его. Я сделал резервную копию папки с данными, которая, как я предполагаю, содержит все, что мне нужно для восстановления базы данных после переустановки mysql.

Я скопировал, вставил и перезаписал старую папку с данными резервной копии, но возникает ошибка, из-за которой MySQL не загружается.

Я скопировал и вставил только папку с тем же именем, что и у моей базы данных (скажем,моябаза данных), и он работает просто отлично, но сама база данных не может быть загружена. Когда я пытаюсь получить доступ к базе данных с помощью SQLyog, каждая таблица выдает "Невозможно открыть файлимя_таблицы.ibd"

Как мне правильно восстановить базу данных?

Я использую MySQL 4.1 и Windows 7.

решение1

Восстановление файлов MySQL InnoDB в Windows

Файлы типа InnoDB были более сложной задачей, и именно поэтому я пишу этот пост. Мне было трудно понять, как это сделать, но я собрал достаточно информации, чтобы выполнить задачу. Теперь, в попытке отплатить, я объясню, что именно я сделал, чтобы восстановить его.

В наших резервных копиях были следующие файлы:

\MySQL\MySQL Server 4.1\data\ibdata1
\MySQL\MySQL Server 4.1\data\ib_logfile0
\MySQL\MySQL Server 4.1\data\ib_logfile1

Плюс ко всему, в папке с данными была папка с именем восстанавливаемой мной базы данных, в которой находились *.frmфайлы ( table_name.frm).

Я выполнил восстановление на своей машине для разработки, а не на самом сервере, потому что не хотел портить то, что работало на сервере. У меня уже был установлен MySQL из установки XAMPP. (На моей машине для разработки установлен Windows XP SP2). XAMPP устанавливает MySQL немного иначе, чем обычная установка MySQL, поэтому, если вам будет легче следовать тому, что я сделал здесь, вы можете установить его.

Сначала я остановил службу MySQL с помощью панели управления XAMPP.

Я переместил перечисленные выше файлы ( ib*файлы и папку, содержащую *.frmфайлы) в локальную папку данных MySQL ( C:\Program Files\xampp\mysql\data).

Затем я отредактировал my.cnf(находится в C:\Program Files\xampp\mysql\bin) и внес следующие изменения (начиная со строки 66 для меня):

СТАРЫЙ:

skip-innodb
#innodb_data_home_dir = C:/Program Files/xampp/mysql/data/
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = C:/Program Files/xampp/mysql/data/
#innodb_log_arch_dir = C:/Program Files/xampp/mysql/data/
#set-variable = innodb_buffer_pool_size=16M
#set-variable = innodb_additional_mem_pool_size=2M
#set-variable = innodb_log_file_size=5M
#set-variable = innodb_log_buffer_size=8M
#innodb_flush_log_at_trx_commit=1
#set-variable = innodb_lock_wait_timeout=5

НОВЫЙ:

#skip-innodb
innodb_data_home_dir = C:/Program Files/xampp/mysql/data/
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = C:/Program Files/xampp/mysql/data/
innodb_log_arch_dir = C:/Program Files/xampp/mysql/data/
set-variable = innodb_buffer_pool_size=16M
set-variable = innodb_additional_mem_pool_size=2M
set-variable = innodb_log_file_size=170M
set-variable = innodb_log_buffer_size=8M
innodb_flush_log_at_trx_commit=1
set-variable = innodb_lock_wait_timeout=50

(Мне пришлось установить innodb_log_file_size на фактический размер моего файла журнала)

Затем я отредактировал пакетный файл XAMPP, который запускает службу mysql ( C:\Program Files\xampp\mysql_start.bat). Я добавил –innodb_force_recovery=6в конец вызова mysqld. Так что строка 8 этого файла теперь выглядит так:

mysql\bin\mysqld –defaults-file=mysql\bin\my.cnf –standalone –console –innodb_force_recovery=6

Это сработало! Мои базы данных были восстановлены на моей машине. Я использовал SQLyogсделать SQL-дамп базы данных для ее восстановления на нашем производственном сервере.

Источник


Дополнительные ресурсы

решение2

Голосование и благодарностьPimp Juice ITза отличный ответ. Я решил похожую проблему с помощью его ответа, но немного по-другому, поэтому я решил поделиться.

Я обновился до более новой версии XAMPP. Я не использую установщик, я просто скачиваю его как новый zip и при этом сталкиваюсь с проблемами.

  1. Сначала я остановил mysql (я запускаю его локально с помощью XAMPP)
  2. Далее я открылмой.iniфайл находится в/xampp/mysql/bin/файл -- для меня мои изменения начались с #skip-innoodb(строки 136). Ваш номер строки может отличаться.

Вот что я изначально нашел:

#... omitted lines above ...
#skip-innodb
innodb_data_home_dir = "/xampp/mysql/data"
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = "/xampp/mysql/data"
#innodb_log_arch_dir = "/xampp/mysql/data"
#... omitted lines below ...

Проблема здесь, похоже, в относительных путях; обратите внимание на отсутствие C:в каталогах выше. Сделать пути абсолютными было моим первым шагом.

#skip-innodb
innodb_data_home_dir = "C:/xampp/mysql/data"
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = "C:/xampp/mysql/data"
#innodb_log_arch_dir = "C:/xampp/mysql/data"
  1. В новой версии XAMPP я хочу начать использовать:
    • В/xampp/mysql/Я переименовалданныекданные_старые
    • Затем все еще в том же каталоге/xampp/mysql/Я скопировалданныекаталог из моего старого XAMPP.
  2. Затем я запустил свой сервер MySQL, и все заработало.

Надеюсь, это кому-нибудь поможет!

решение3

Вот что я сделал на Windows 10 с MySQL 5.7

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

По сути, из исходной папки установки я скопировал только те папки, названия которых соответствуют схемам, которые меня интересовали. Далее, основные параметры, которые нужно применить, находятся на вкладке «Безопасность» диалогового окна свойств папки:

  • назначение права собственности на основную папку с данными и все ее подпапки (включая только что скопированные) учетной записи SYSTEM(не администратору, не администратору или любому другому пользователю, который использовался для копирования);
  • добавление NETWORK SERVICEк пользователям с полным контролем над папкой.

Я нашел эти инструкции на форумах MySQL, вот оригинальные сообщения:

Оригинальные, полные инструкции Рэя Йейтса:

Для потомков:

  1. Я щелкнул правой кнопкой мыши по папке C:...\Data\ и выбрал Свойства -> Безопасность - Дополнительно и увидел субъекта с именем СЕТЕВАЯ СЛУЖБА.

  2. В отдельном окне я щелкнул правой кнопкой мыши по копии папки E:\MYSQL\Data\ и обнаружил, что такой настройки нет.

  3. Я нажимаю кнопку [Добавить], затем ссылку «Выбрать основного» и ввожу имя объекта NETWORK SERVICE и [OK]

  4. Я выбрал СЕТЕВУЮ СЛУЖБУ, нажал [изменить] и поставил галочку Полный доступ [ok]

  5. Затем я повторил все первоначальные шаги, и сервер запустился, как и ожидалось.

Связанный контент