Битрикс и ошибки с b_xml_tree
Если вы используете на своем сайте обмен между магазином и 1C, то скорее всего натыкались на ошибки связанные с таблицей b_xml_tree . Подробные коды бывают разные, но причины всегда одинаковые.
Таблица b_xml_tree
Сама таблица b_xml_tree в базе данных существует для обеспечения функционала обмена сайта с внешними системами, в 99% случаев это 1С. В оставшемся 1% прочее ПО использующее в своей работе принцип обмена заложенный для связи с 1С. Задействована таблица исключительно в процессе обмена.
В процессе обмена интернет-магазина с учетной системой, можно наткнуться на различные описания ошибки:
MySQL Query Error: create table b_xml_tree_import_1c или Сan't create table 'b_xml_tree' (errno: -1) или ...
Причина всегда одна - обмен с 1С "наслоился" или "идет по кругу". И для решения проблемы нужно свести число обменов происходящих в одно время до одного!
Что делать?
Как обычно у вас есть два пути - писать в техническую поддержку вендора или разбираться самостоятельно. В случае написания в поддержку в первом (полезном) сообщении вам предложат:
После этого вам (возможно) ответят нужно сделать тоже самое, что написано на пару абзацев выше - проанализировать интенсивность и "наложение" обменов.
Теперь, для тех кто все делает сам, проанализируйте свои обмены и исключите лишние. В каких случаях это бывает и где искать параллельные выгрузки:
Ситуация 1.
Вы используете многосайтовую конфигурацию (несколько сайтов в одной админке битрикса) и осуществляете обмен с разными сайтами в одно время. Таким образом в базе данных происходит крах таблицы из-за наложения обменов. Просто разведите обмены по времени.
Ситуация 2.
В 1С используется регламентная выгрузка только изменений. При смене формата на "полная выгрузка" и последующем возвращении к режиму "только изменения" произошел "трабл" и полная выгрузка продолжает запускается в фоновом режиме. Проверьте узе обмена.
Ситуация 3.
Существует выгрузка по расписанию, которая обновляет остатки и цены в своем графике, но кто-то решил "толкнуть" полную выгрузку (или частичную выгрузку) вручную и потоки наложились вызвав ошибку.
Ситуация 4.
Вы используете несколько 1С и обновляете сайт то с одной то с другой. Это точное повторение ситуации 1 навыворот. Просто разведите обмены по времени.
Ситуация 5.
Характеризуется особенной ошибкой:
MySQL Query Error: select ID, ATTRIBUTES from b_xml_tree where (ID = 1) and ...
Возникает при существенных обновлениях самого движка или переезде с сервера на сервер. Причина в неверной кодировка таблицы. Просто запустите проверки сайта или выполните запрос:
alter database [ИМЯ БАЗЫ ДАННЫХ - default = sitemanager] default character set utf8;
P.S Если так произошло, что таблица разрушена (бывает при переносе сайта и мистических обстоятельствах) зачастую достаточно запустить проверку базы данных в админке и исправить ошибки, если инструмент ошибку не диагностирует, то физически удалить файлы таблиц базы данных на сервере:
/var/lib/mysql/[ ИМЯ БАЗЫ ДАННЫХ - default = sitemanager]/b_xml_tree_import_1c.ibd /var/lib/mysql/[ ИМЯ БАЗЫ ДАННЫХ - default = sitemanager]/b_xml_tree.ibd