Восстановление, если MYSQL не стартует: различия между версиями
Misha (обсуждение | вклад) (→Запускаем MYSQL) |
Misha (обсуждение | вклад) (→Делаем дампы всех баз) |
||
Строка 25: | Строка 25: | ||
===Делаем дампы всех баз=== | ===Делаем дампы всех баз=== | ||
Если сервис стартовал, то пробуем сделать дампы всех баз данных. Для этого создаем командный файл - dump.cmd. Название баз берем из списка папок в каталоге d:\mysql\data, исключая оттуда базы mysql и perfomance_schema. | Если сервис стартовал, то пробуем сделать дампы всех баз данных. Для этого создаем командный файл - dump.cmd. Название баз берем из списка папок в каталоге d:\mysql\data, исключая оттуда базы mysql и perfomance_schema. | ||
− | <pre>d:\mysql\bin\mysqldump -uuser -ppasswd | + | <pre>d:\mysql\bin\mysqldump -uuser -ppasswd base1 > d:\arhiv\base.sql |
. | . | ||
. | . | ||
− | d:\mysql\bin\mysqldump -uuser -ppasswd | + | d:\mysql\bin\mysqldump -uuser -ppasswd baseN > d:\arhiv\baseN.sql |
</pre> | </pre> | ||
Где d:\mysql\bin путь по файла mysqldump<br> | Где d:\mysql\bin путь по файла mysqldump<br> | ||
user - пользователь базы данных<br> | user - пользователь базы данных<br> | ||
passwd - пароль пользователя user<br> | passwd - пароль пользователя user<br> | ||
− | + | base1...baseN - имена баз данных | |
d:\arhiv\ - путь до папки архивов. | d:\arhiv\ - путь до папки архивов. | ||
+ | |||
==Останавливаем сервис== | ==Останавливаем сервис== | ||
<pre>net stop mysql</pre> | <pre>net stop mysql</pre> |
Версия 21:53, 11 марта 2016
Самое правильное иметь дампы баз, сделанных заранее. Тогда восстановить все намного проще.
Буду писать про виндовый mysql. Допустим папка mysql лежит в d:\mysql
Случилась ситуация, что при запуске сервиса MYSQL, он сразу падает. В логах пишет, что повреждены INNODB таблицы.
Содержание
- 1 Делаем архив папки d:\mysql\data, где лежат все таблицы базы данных. (На всякий случай).
- 2 Записываем названия баз данных - названия папок в папке d:\mysql\data.
- 3 Пытаемся сделать дампы баз
- 4 Останавливаем сервис
- 5 Переносим все файлы из папок баз в другое место
- 6 Запускаем MYSQL
- 7 Восстанавливаем базы данных
Делаем архив папки 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 в другое место оставив существующие папки баз данных.
Запускаем MYSQL
Ставим параметр в my.ini
[mysqld] innodb_force_recovery=0
И запускаем сервис MYSQL
net start mysql
Восстанавливаем базы данных
Создаем файл create.cmd
d:\mysql\mysql -uuser -ppasswd base1 < base1.sql . . d:\mysql\mysql -uuser -ppasswd baseN < baseN.sql