[Решено] MySQL Как востановить работу innoDB после падения?

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
Ответить
[Решено] MySQL Как востановить работу innoDB после падения?
После падения (нештатного выключения сервера)
Повредилась Innodb
Имеем куча ошибок: InnoDB: Missing MLOG_CHECKPOINT at 426126876848 between the checkpoint 426126876848 and the end 426126876672

а при попытке сделать дам:
mysqldump: Couldn't execute 'SEL ECT engine FR OM INFORMATION_SCHEMA.TABLES WHERE table_schema = DATABASE() AND table_name = 'b_user_group'': MySQL server has gone away (2006)
Стопните все апачики и пхп-фпм, если они есть, чтобы с базой ничего не работало. Остановите сам мускль и заархивируйте на всякий случай /var/lib/mysql, чтобы если что-то пойдет не так можно было вернуться к исходному состоянию.
Потом запускайте бд с innodb_force_recovery от 3 до 6 и делайте дамп, начните с 3, если дамп не сделается, то повышайте.
Если совсем все плохо и дамп не делается даже на 6 уровне, то надо сливать потаблично. Если и так не сливается, часто всякие большие таблицы логов, то можно у них слить чисто схему таблицы --no-data ключ.
Потом все останавливаете, удаляйте файлы ibdata, ib_log*, и все файлы с расширением .ibd, стартуете мускль в нормальном режиме и загружаете дампы.
Услуги Системного Администратора - Работаю только с Юр. Лицами по договору обслуживания.
В общем этапы действий следующие, если кому понадобится то я опишу.
1. Запускаем в сейв мод минимальном для старта.
2. Делаем дамп всех баз данных смотрим какая база останавливает дамп и вываливает в ошибку сервера.
3. Дампим все целые базы
4. Базы которые в состояние дать show tables делаем дамб и смотрм какая таблица валит дамп, обходим эту таблицу или эксклудом или дампим все таблицы отдельно
5. Если база не в состояние дать даже список таблиц в бд то забираем только таблицы, каждую по отдельности, для этого заходим в папку где хранятся сами файлы и выбираем
cd /var/lib/mysql/ваша бд/
TABLE=$(ls  -la | grep ibd | grep -Eo b_.+[^.]) && echo "$TABLE" | cut -d '.' -f 1

можно было конечно изящьней сделать но небыло времени, да и наглядность дает.
В кратце мы читаем директорию только ibd расширения, удаляем в строке само расширение оставляя только список таблиц.

Все что нам остается передать их в массив и смотреть какой код они отдают при дампе.
mkdir /tmp/111
mysqldump -uroot dbhikvisionpro b_vote > /tmp/111/b_vote.sql  2>&1 || echo "b_vote $?"
mysqldump -uroot dbhikvisionpro b_vote_question > /tmp/111/b_vote_question.sql  2>&1 || echo "b_vote_question $?"
mysqldump -uroot dbhikvisionpro b_vote_user > /tmp/111/b_vote_user.sql  2>&1 || echo "b_vote_user $?"

на выходе имеем таблицы в папке, каждая своим файлом ( так удобней смотреть)
исключаем те что крашат базу.
В моем случае пришлось гасить mysql через kill -9 ps aux | grep mysql
kill -9 номер пида
После того как все плохие таблицы были исключены собираем все в кучу, вместо > делаем >> и на выход даем один файл, в результате получаем обычный дамп. на самом деле вариантов много через эксклуд и перечисление таблиц и тд и тп, но мне проще работать с массивами в баше.
в результате получаем дамп, переносим его на отдельный сервер проверяем работает ли все, ну и после этого уже разбираемся в индивидуальном порядке с крашнутыми таблицами.
в моем случае бэкапов вообще небыло так что даже стандартные таблицы можно было востановить только от стоковых таблиц движка. дабы мне этого хватило.
ибо было убито 4 таблицы 2 востановил стоковыми ( хранение сессий и тд)
2 можно было убить использовались при импорте 1с и креатятся каждый раз.

mysqldump -uroot dbhikvisionpro b_abtest >> /tmp/alltables.sql
mysqldump -uroot dbhikvisionpro b_admin_notify >> /tmp/alltables.sql
mysqldump -uroot dbhikvisionpro b_admin_notify_lang >> /tmp/alltables.sql
mysqldump -uroot dbhikvisionpro b_adv_banner_2_country >> /tmp/alltables.sql

Также ознакомьтесь:
Восстанавливаем поврежденные таблицы Innodb
[MYSQL] Как выгрузить все таблицы базы в отдельные файлы.
Услуги Системного Администратора - Работаю только с Юр. Лицами по договору обслуживания.
Страницы: 1
Ответить
Форма ответов
 
Текст сообщения*
:) ;) :D 8-) :( :| :cry: :evil: :o :oops: :{} :?: :!: :idea:
Защита от автоматических сообщений. Введите символы, изображенные на этой картинке в поле ввода &quote;Код подтверждения&quote;.