После падения (нештатного выключения сервера) Повредилась 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с и креатятся каждый раз.