Spec-Zone .ru
спецификации, руководства, описания, API

14.2.4.7. Поиск и устранение неисправностей InnoDB Операции Словаря данных

Информация о табличных определениях хранится оба в .frm файлы, и в словаре данных InnoDB. Если Вы перемещаетесь .frm файлы вокруг, или если катастрофические отказы сервера в середине работы словаря данных, эти источники информации могут стать непоследовательными.

Проблема с CREATE TABLE

Признак словаря данных из синхронизации - это a CREATE TABLE сбои оператора. Если это происходит, смотрите в журнале ошибок сервера. Если журнал говорит, что таблица уже существует в InnoDB внутренний словарь данных, у Вас есть осиротевшая таблица в InnoDB файлы табличной области, у которого нет никакого соответствия .frm файл. Сообщение об ошибке похоже на это:

InnoDB: Error: table test/parent already exists in InnoDB internalInnoDB: data dictionary. Have you deleted the .frm fileInnoDB: and not used DROP TABLE? Have you used DROP DATABASEInnoDB: for InnoDB tables in MySQL version <= 3.23.43?InnoDB: See the Restrictions section of the InnoDB manual.InnoDB: You can drop the orphaned table inside InnoDB byInnoDB: creating an InnoDB table with the same name in anotherInnoDB: database and moving the .frm file to the current database.InnoDB: Then MySQL thinks the table exists, and DROP TABLE willInnoDB: succeed.

Можно отбросить осиротевшую таблицу, следуя инструкциям, данным в сообщении об ошибке. Если Вы все еще неспособны использовать DROP TABLE успешно, проблема может быть должна назвать завершение в mysql клиенте. Чтобы работать вокруг этой проблемы, запустите mysql клиент с --skip-auto-rehash опция и попытка DROP TABLE снова. (С завершением имени на mysql пытается создать список имен таблиц, который перестал работать, когда проблема такой как только описано существует.)

Проблема Вводная Таблица

Другой признак словаря данных из синхронизации - то, что MySQL печатает ошибку, что он не может открыть a .InnoDB файл:

ERROR 1016: Can't open file: 'child2.InnoDB'. (errno: 1)

В журнале ошибок можно найти сообщение как это:

InnoDB: Cannot find table test/child2 from the internal data dictionaryInnoDB: of InnoDB though the .frm file for the table exists. Maybe youInnoDB: have deleted and recreated InnoDB data files but have forgottenInnoDB: to delete the corresponding .frm files of InnoDB tables?

Это означает, что есть осиротевшее .frm файл без соответствующей таблицы внутри InnoDB. Можно отбросить осиротевшее .frm файл, удаляя это вручную.

Проблема с Временной таблицей

Если MySQL отказывает в середине ALTER TABLE работа, можно закончить с осиротевшей временной таблицей в InnoDB табличная область. Используя Табличный Монитор, можно видеть, перечислял таблицу с именем, которое начинается #sql-. Можно выполнить SQL-операторы на таблицах, имя которых содержит символ"#"если Вы включаете имя в пределах обратных галочек. Таким образом можно отбросить такую осиротевшую таблицу как любая другая осиротевшая таблица, используя метод, описанный ранее. Чтобы скопировать или переименовать файл в оболочке Unix, Вы должны поместить имя файла в двойные кавычки, если имя файла содержит"#".

Проблема с Недостающей Табличной областью

С innodb_file_per_table включенный, следующее сообщение могло бы произойти если .frm или .ibd файлы (или оба) отсутствуют:

InnoDB: in InnoDB data dictionary has tablespace id N,InnoDB: but tablespace with that id or name does not exist. HaveInnoDB: you deleted or moved .ibd files?InnoDB: This may also be a table created with CREATE TEMPORARY TABLEInnoDB: whose .ibd and .frm files MySQL automatically removed, but theInnoDB: table still exists in the InnoDB internal data dictionary.

Если это происходит, попробуйте следующую процедуру, чтобы разрешить проблему:

  1. Создайте соответствие .frm файл в некотором другом каталоге базы данных и копии это к каталогу базы данных, где таблица висячей строки располагается.

  2. Проблема DROP TABLE для исходной таблицы. Это должно успешно отбросить таблицу и InnoDB должен напечатать предупреждение журналу ошибок что .ibd файл отсутствовал.