5

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

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

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

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

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

2 ответа2

2

Восстановление файлов 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 для меня):

OLD:

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

NEW:

#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, чтобы восстановить его на нашем производственном сервере.

Источник


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

0

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

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

  1. Сначала я остановил MySQL (я запускаю его локально, используя XAMPP)
  2. Затем я открыл файл my.ini, расположенный в /xampp/mysql/bin/ file - для меня мои изменения начались с #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/ я переименовал данные в data_old
    • Затем все еще в том же каталоге /xampp/mysql/ я скопировал каталог данных из моего старого XAMPP.
  2. Затем я запустил свой MySQL-сервер, и все было хорошо, чтобы пойти

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .