Наш блог
Показать рубрики

Ошибка MySQL "Can't create table 'b_xml_tree' (errno: -1)"

Назад к списку статей
Ошибка MySQL "Can't create table 'b_xml_tree' (errno: -1)"
Этот короткий пост рассказывает о том, как мы боролись с ошибкой базы данных "Can't create table 'b_xml_tree' (errno: -1)", возникшей при обмене интернет-магазина с 1С и какое было найдено решение.

Как обнаружили ошибку

Данная ошибка возникла у одного из наших клиентов, в интернет-магазине которого внезапно перестала проходить синхронизация с 1С. В логе обмена с 1С были обнаружены такие записи:


Процесс выполнения обмена: Распаковка архива завершена.
Процесс выполнения обмена: Временные таблицы удалены.
Произошла ошибка на стороне сервера. Получен неизвестный статус импорта.
Ответ сервера:
MySQL Query Error: create table b_xml_tree ( ID int(11) not null auto_increment, PARENT_ID int(11), LEFT_MARGIN int(11), RIGHT_MARGIN int(11), DEPTH_LEVEL int(11), NAME varchar(255), VALUE longtext, ATTRIBUTES text, PRIMARY KEY (ID) ); [Can't create table 'dbname.b_xml_tree' (errno: -1)]

При всем этом - никаких изменений в процессы обмена сайта и 1С накануне внесено не было, но проблема явно на стороне сайта. Выгрузка обрывается с ошибкой создания таблицы в БД на этапе чтения xml-файла импорта.

Как удалось решить

Первым делом было проверено выполняется ли этот запрос на создание таблицы вручную через консоль. Оказалось - нет, не выполняется. Получали такую же ошибку как и при обмене - "Can't create table". Затем в запросе было изменено название таблицы с b_xml_tree на b_xml_tree1. Таблица создалась! Выходит, что таблица не может создастся именно с названием b_xml_tree.

Тип таблиц на сайте - InnoDB. Не зависимо от типа хранения таблицы в MySQL (InnoDB или MyISAM) - для нее создается файл с расширением .frm. Этот файл хранит в себе описание таблицы и называется так же, как и она. InnoDB таблицы и индексы могут быть сохранены в собственный файл (так называемая функция "multiple tablespaces"). Если такая опция включена, InnoDB будет хранить вновь созданную таблицу в *.ibd файле в каталоге базы данных рядом с файлами расширение .frm.

Соответственно, если таблицы в БД нет, то и этих файлов тоже быть не должно. Зашли на сервер, перешли в /var/lib/mysql/dbname/ и обнаруживаем там файл b_xml_tree.ibd, которого там быть совсем не должно, если таблица удалена. После удаление этого лишнего файла - таблица снова смогла создаваться без проблем! Собственно, это и было решением возникшей ошибки. Но почему этот файл остался в системе после удаления таблицы, обнаружено так и не было.

Ссылки по теме

Назад к списку статей
Подпишись на наш блог: