Восстановление, если MYSQL не стартует: различия между версиями

Материал из Wiki МИАЦ ВО
Перейти к навигации Перейти к поиску
(Значения innodb_force_recovery)
Строка 1: Строка 1:
 +
Вы можете разобраться самостоятельно. Вся информация расположена [http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting.html тут]<br>
 
Самое правильное иметь дампы баз, сделанных заранее. Тогда восстановить все намного проще.<br>
 
Самое правильное иметь дампы баз, сделанных заранее. Тогда восстановить все намного проще.<br>
 
Буду писать про виндовый mysql. Допустим папка mysql лежит в d:\mysql<br>
 
Буду писать про виндовый mysql. Допустим папка mysql лежит в d:\mysql<br>

Версия 22:26, 11 марта 2016

Вы можете разобраться самостоятельно. Вся информация расположена тут
Самое правильное иметь дампы баз, сделанных заранее. Тогда восстановить все намного проще.
Буду писать про виндовый mysql. Допустим папка mysql лежит в d:\mysql
Случилась ситуация, что при запуске сервиса MYSQL, он сразу падает. В логах пишет, что повреждены INNODB таблицы.

Делаем архив папки d:\mysql\data, где лежат все таблицы базы данных. (На всякий случай).

Записываем названия баз данных - названия папок в папке d:\mysql\data.

Пытаемся сделать дампы баз

Редактируем d:\mysql\my.ini

В блок [mysqld] вставляем строку с innodb_force_recovery.

[mysqld]
innodb_force_recovery=1

Значения innodb_force_recovery

По умолчанию innodb_force_recovery равен 0 -(обычный режим загрузки без принудительного восстановления). Допустимые значения отличные от нуля для innodb_force_recovery от 1 до 6. Большее значение включает в себя функциональность меньших значений. Например, значение 3 включает в себя все функциональные возможности значений 1 и 2.

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

Значение 4 или выше считается опасным , так как файлы данных могут быть повреждены. Значение 6 считается радикальным , поскольку страницы базы данных остаются в устаревшем состоянии, которое , в свою очередь, может привести к сильным повреждениям в B-деревьях и других структурах баз данных.

В качестве меры безопасности, InnoDB предотвращает INSERT , UPDATE или DELETE операции , когда innodb_force_recovery установлен больше 0. При значениях innodb_force_recovery 4 и больше, InnoDB работает в режиме только для чтения.

Более подробно можно прочитать тут

Пробуем запустить MYSQL.

Для этого с консоли, запущенной от администратора запускаем.

net start mysql

Если не стартовало, увеличиваем значение innodb_force_recovery и снова пробуем запустить.

Делаем дампы всех баз

Если сервис стартовал, то пробуем сделать дампы всех баз данных. Для этого создаем командный файл - dump.cmd. Название баз берем из списка папок в каталоге d:\mysql\data, исключая оттуда базы mysql и perfomance_schema.

d:\mysql\bin\mysqldump -uuser -ppasswd base1 > d:\arhiv\base.sql
.
.
d:\mysql\bin\mysqldump -uuser -ppasswd baseN > d:\arhiv\baseN.sql

Где d:\mysql\bin путь по файла mysqldump
user - пользователь базы данных
passwd - пароль пользователя user
base1...baseN - имена баз данных
d:\arhiv\ - путь до папки архивов.

Останавливаем сервис

net stop mysql

Переносим все файлы из папок баз в другое место

Переносим файлы из папки d:\mysql\data\ib_logfile0, d:\mysql\data\ib_logfile1, ibdata1, а также все файлы из папок баз данных в другое место, оставив существующие папки баз данных.

Запускаем MYSQL

Ставим параметр в my.ini

[mysqld]
innodb_force_recovery=0

И запускаем сервис MYSQL

net start mysql

Восстанавливаем базы данных

Создаем файл create.cmd

d:\mysql\bin\mysql -uuser -ppasswd base1 < d:\arhiv\base1.sql
.
d:\mysql\bin\mysql -uuser -ppasswd baseN < d:\arhiv\baseN.sql

d:\mysql\bin\ - путь до mysql.exe
И запускаем его.
Базу МИС можно восстановить из архивов. Сначала распаковываем последние архивы all*.rar и part*.rar и загружаем полученные dampall.sql, а потом part.sql

d:\mysql\bin\mysql -uuser -ppasswd new < d:\mysql\data\dampall.sql
d:\mysql\bin\mysql -uuser -ppasswd new < d:\mysql\data\part.sql

d:\mysql\bin\ - путь до mysql.exe
d:\mysql\data\ - путь по папки с файлами дампов.