Восстановление, если MYSQL не стартует

Материал из Wiki МИАЦ ВО
Перейти к навигации Перейти к поиску

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

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

Запускаем консоль от имени администратора

net stop mysql

Делаем архив папки 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 от 1 до 6. Большее значение включает в себя функциональность меньших значений. Например, значение 3 включает в себя все функциональные возможности значений 1 и 2. В качестве меры безопасности, InnoDB предотвращает INSERT , UPDATE или DELETE операции , когда innodb_force_recovery установлен больше 0. При значениях innodb_force_recovery 4 и больше, InnoDB работает в режиме только для чтения.

Значение 0

По умолчанию innodb_force_recovery равен 0 -(обычный режим загрузки без принудительного восстановления).

Значения 1,2,3

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

Значение 4

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

Значение 6

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

Пробуем запустить 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\ - путь до папки архивов.

Если дампы сделались нормально, то входим в mysql и

пересоздаем те базы, которым были сделаны дампы.

d:\mysql\bin\mysql -uuser -ppasswd
mysql>drop database base1;
mysql>create database base1;
.
.
mysql>drop database baseN;
mysql>create database baseN;
mysql>\q

Перезапускаем MYSQL

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

net stop 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\ - путь по папки с файлами дампов.