Вполне возможно, что таблица повреждена. Я не имею в виду, что данные и / или страницы индекса повреждены. Там может быть что-то очень простое, что сломано.
Недавно у меня возникла проблема со сценарием резервного копирования на подчиненном сервере, когда я параллельно выполнял mysqldumped несколько баз данных. Запуск mysqldump на одной из баз данных привел к очень маленькому mysqldump. В БД было более 80 таблиц. Однако mysqldump остановился на пятой таблице в БД. Когда я побежал SHOW CREATE TABLE tblname\G
по столу на ведомом устройстве, я получил ошибку «Таблица не найдена». Когда я побежал SHOW CREATE TABLE tblname\G
на Мастер, описание таблицы отображалось, как и ожидалось.
То, что произошло, было немного сумасшедшим: клиент попросил восстановить таблицу, а инженер восстановил файл .ibd таблицы InnoDB из резервной копии диска. Идентификатор табличного пространства файла .ibd (который был 25) не соответствовал идентификатору табличного пространства, зарегистрированному в ibdata1 (который был 28).
Я исправил проблему, закрыв подчиненное устройство, выполнив mysqldumping master и настроив репликацию с нуля. К счастью, общий объем данных и индекса составил 7 ГБ. Таким образом, процесс rstore не имеет большого значения.
МОРАЛЬ ИСТОРИИ
Основная проблема заключается в том, что mysqldump не сообщает об ошибке на InnoDB, когда идентификатор табличного пространства неверен. Когда mysqldump завершает работу и не выгружает каждую таблицу в алфавитном порядке, это указывает на то, что она завершилась ошибкой и сделала это без вывода сообщения об ошибке.
Проверьте, чтобы убедиться
- Вы можете отобразить структуру таблицы, используя
SHOW CREATE TABLE
- Вы можете запросить все о таблице из INFORMATION_SCHEMA.TABLES