У меня есть несколько таблиц, которые разделены и имеют несколько индексов на реплицированном ведомом устройстве. После копирования моментального снимка (проверенного безопасного) на новое ведомое устройство и обновления mysqld с 5.1.42 до 5.5.15 и перезапуска репликации я получаю сбои InnoDB с сообщением об ошибке «Неверный указатель ...»
Эти ошибки произошли на 2 серверах с разным оборудованием и O / S. После запуска:
ALTER TABLE .... COALESCE PARTION n;
проблема уходит за этот стол.
Мой вопрос, однако, больше по объему, и это «Как вы определяете повреждение таблицы InnoDB?» или перефразировал "Как вы оцениваете здоровье таблицы InnoDB?" Является ли «CHECK TABLE» единственным доступным инструментом для выявления проблем до сбоя?
Не уверен, что это имеет значение, но произошли сбои во время работы: Версия: «5.5.15-55-log», сокет: «/opt/mysql.sock», порт: 3306 Percona Server (GPL), выпуск rel21.0, редакция 158
источник
Ответы:
В своем комментарии Морган намекает, что InnoDB постоянно проверяет наличие поврежденных страниц, выполняя контрольные суммы на страницах, которые он читает. Если InnoDB находит несоответствие контрольной суммы, он будет
врезатьсяостановить сервер.Если вы хотите ускорить этот процесс (вместо того, чтобы ждать, пока InnoDB прочитает поврежденную страницу), вы можете использовать
innochecksum
:Интересная оговорка:
Так что да, для онлайн таблицы
CHECK TABLE
, вероятно, это инструмент (или, как указано в другом ответе,mysqlcheck
если вы хотите сделать больше, чем одну базу данных одновременно).Если вы можете закрыть свою базу данных, вы можете принудительно установить контрольные суммы, используя
innochecksum
Анекдот: на табличном пространстве innodb размером 29 ГБ (с
innodb_file_per_table=1
) этот сценарий занял около 2 минутВ качестве бонуса, тем не менее, поскольку вы используете Percona, они реализовали новый метод для быстрой проверки контрольной суммы innodb . Я никогда не использовал его, но это может ускорить процесс.
источник
ВНИМАНИЕ: перед выполнением любой из этих инструкций настоятельно рекомендуется убедиться в том, что на всякий случай имеется надежная резервная копия вашей базы данных. (спасибо @Nick за предупреждение)
Попробуйте использовать
mysqlcheck
команду. На терминале:Эта команда выведет список всех таблиц и статус, сообщающий о наличии каких-либо повреждений:
Имея это в руках, вы уже будете знать, какие столы вам нужно починить. На всякий случай, если вы хотите починить все сразу:
Подробнее о
mysqlcheck
: http://dev.mysql.com/doc/refman/5.0/en/mysqlcheck.htmlПримечание: вы пометили свой вопрос с помощью percona . Я понятия не имел, что это было, поэтому я погуглил. Кажется, это вилка MySQL, но у меня нет оснований полагать, что команды несовместимы (пальцы скрещены).
Кто-то указал мне на это руководство, в котором есть более конкретные инструкции по восстановлению базы данных InnoDB для более критических ситуаций, когда вся база данных не запускается: http://www.softwareprojects.com/resources/programming/t-how-to-fix-mysql -database-MyISAM-InnoDB-1634.html
источник
CHECK TABLE
. В документации вы связаны с состояниями: "mysqlcheck
использует операторы SQLCHECK TABLE
,REPAIR TABLE
,ANALYZE TABLE
, иOPTIMIZE TABLE
в удобном для пользователя образом Он определяет , какие заявления использования для операции , которую вы хотите выполнить, а затем отправляет заявления на сервер будет выполняться.. " Это не синоним; это пользовательский интерфейс для коллекции операторов.В соответствии с Руководством по изучению сертификации MySQL 5.0, раздел 45.4 :
Пожалуйста, прочтите MySQL Docs на InnoDB Forced Recovery
источник
Интересно, что произойдет, если кто-нибудь использует данные InnoDB, созданные с помощью плагина InnoDB, а затем переключится на другую версию InnoDB. Это может привести к повреждению страницы в глазах mysqld.
Обратите внимание, что документация MySQL по формату файлов InnoDB говорит об этой возможности:
Я бы скинул данные на раба. На самом деле, я бы просто использовал грубую силу, получив логический дамп (mysqldump) данных:
Мой оригинальный опубликованный ответ считается «старой школой». Тем не менее, в этом случае я бы определенно посмотрел на форматы файлов, используемые .ibd и / или ibdata1.
источник