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