Восстановление, если MYSQL не стартует: различия между версиями
Misha (обсуждение | вклад) (→Редактируем d:\mysql\my.ini) |
Misha (обсуждение | вклад) (→Делаем архив папки d:\mysql\data, где лежат все таблицы базы данных. (На всякий случай).) |
||
(не показана 21 промежуточная версия этого же участника) | |||
Строка 1: | Строка 1: | ||
+ | Вы можете разобраться самостоятельно. Вся информация расположена [http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting.html тут]<br> | ||
+ | Самое правильное иметь дампы баз, сделанных заранее. Тогда восстановить все намного проще.<br> | ||
Буду писать про виндовый mysql. Допустим папка mysql лежит в d:\mysql<br> | Буду писать про виндовый mysql. Допустим папка mysql лежит в d:\mysql<br> | ||
− | Случилась ситуация, что при запуске сервиса MYSQL, он сразу | + | Случилась ситуация, что при запуске сервиса MYSQL, он падает сразу или через некоторое время. В логах пишет, что повреждены INNODB таблицы. |
− | ==Делаем архив папки d:\mysql\data, где лежат все таблицы базы данных. (На всякий случай).== | + | ==Останавливаем сервис mysql== |
+ | Запускаем консоль от имени '''администратора''' | ||
+ | <pre>net stop mysql</pre> | ||
+ | ==Делаем архив папки d:\mysql\data, где лежат все таблицы базы данных. (На всякий случай).== | ||
+ | |||
==Записываем названия баз данных - названия папок в папке d:\mysql\data.== | ==Записываем названия баз данных - названия папок в папке d:\mysql\data.== | ||
==Пытаемся сделать дампы баз== | ==Пытаемся сделать дампы баз== | ||
Строка 8: | Строка 14: | ||
<pre>[mysqld] | <pre>[mysqld] | ||
innodb_force_recovery=1</pre> | innodb_force_recovery=1</pre> | ||
− | === | + | ====Значения innodb_force_recovery==== |
+ | Более подробно можно прочитать [[Принудительное восстановление InnoDB|тут]]<br> | ||
+ | Допустимые значения отличные от нуля для 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.=== | ||
Для этого с консоли, запущенной от администратора запускаем. | Для этого с консоли, запущенной от администратора запускаем. | ||
<pre>net start mysql</pre> | <pre>net start mysql</pre> | ||
− | Если не стартовало, увеличиваем значение innodb_force_recovery и снова пробуем запустить. | + | Если не стартовало или падает при выполнении дампа, увеличиваем значение innodb_force_recovery и снова пробуем запустить. |
+ | |||
===Делаем дампы всех баз=== | ===Делаем дампы всех баз=== | ||
Если сервис стартовал, то пробуем сделать дампы всех баз данных. Для этого создаем командный файл - 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 - имена баз данных<br> | |
d:\arhiv\ - путь до папки архивов. | d:\arhiv\ - путь до папки архивов. | ||
− | |||
− | |||
− | |||
− | |||
− | + | Если дампы сделались нормально, то входим в mysql и | |
+ | ===пересоздаем те базы, которым были сделаны дампы.=== | ||
+ | <pre>d:\mysql\bin\mysql -uuser -ppasswd | ||
+ | mysql>drop database base1; | ||
+ | mysql>create database base1; | ||
+ | . | ||
+ | . | ||
+ | mysql>drop database baseN; | ||
+ | mysql>create database baseN; | ||
+ | mysql>\q | ||
+ | </pre> | ||
− | + | ==Перезапускаем MYSQL== | |
+ | Останавливаем сервис mysql | ||
+ | <pre>net stop mysql</pre> | ||
+ | Ставим параметр в my.ini | ||
+ | <pre>[mysqld] | ||
+ | innodb_force_recovery=0</pre> | ||
+ | И запускаем сервис MYSQL | ||
+ | <pre>net start mysql</pre> | ||
− | + | ==Восстанавливаем базы данных== | |
+ | Создаем файл create.cmd | ||
+ | <pre>d:\mysql\bin\mysql -uuser -ppasswd base1 < d:\arhiv\base1.sql | ||
+ | . | ||
+ | d:\mysql\bin\mysql -uuser -ppasswd baseN < d:\arhiv\baseN.sql | ||
+ | </pre> | ||
+ | d:\mysql\bin\ - путь до mysql.exe<br> | ||
+ | И запускаем его.<br> | ||
+ | Базу МИС можно восстановить из архивов. Сначала распаковываем последние архивы all*.rar и part*.rar и загружаем полученные dampall.sql, а потом part.sql | ||
+ | <pre> | ||
+ | d:\mysql\bin\mysql -uuser -ppasswd new < d:\mysql\data\dampall.sql | ||
+ | d:\mysql\bin\mysql -uuser -ppasswd new < d:\mysql\data\part.sql | ||
+ | </pre> | ||
+ | d:\mysql\bin\ - путь до mysql.exe<br> | ||
+ | d:\mysql\data\ - путь по папки с файлами дампов. |
Текущая версия на 09:35, 20 октября 2016
Вы можете разобраться самостоятельно. Вся информация расположена тут
Самое правильное иметь дампы баз, сделанных заранее. Тогда восстановить все намного проще.
Буду писать про виндовый 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\ - путь по папки с файлами дампов.