Comments 27
А в статье история борьбы, а не победы…
P.S. А вообще — я подумал — похоже на неверный уровень изоляции транзакций, или что-то подобное.
А в MariaDB полный баг репорт не отсылали?
Ответ разработчиков Битрикса?
Да.
А в MariaDB полный баг репорт не отсылали?
Полный — не отсылал. Отправить только текст того запроса который мне из битрикс прислали в тикет. Но они свою позицию обозначили вполне конкретно и полный отчет бы тут ничем не помог.
Невозможность поднять быстро сервер с нужной конфигурацией тоже чревата седыми волосами в бороде, особенно если отличия были достаточно серьезными, с установкой самостоятельно компилируемых пакетов, которые при этом еще нормально не отражены в инструкции.
Как Вам ситуация — отпуск на Канарах и случайно (тотально) упавший сервер, а полный бэкап сервера отказывается развернуться, но при этом есть бэкапы сайтов клиентов? Моё предсказание — к длинным матам в монитор планшета, цепляясь по гостиничному вайфаю, пытаясь понять чего ж еще не хватает сайту.
А вообще был у меня как-то случай когда почтовый сервер после отключения (сбой по питанию в ДЦ) не поднялся. Там Zimbra была. Проблема оказалась в том, что я тогда по неопытности перед установкой зимбры не снес дефолтный exim. После ребута сначала поднимался не настроенный дефолтный, а потом зимбровский не мог подняться т.к. порт занят. Долго искал проблему как Вы написали с «длинными матами в монитор планшета» ибо работал тогда на удаленке и куда-то от компа свалил…
Я почитал историю изменений, но в чем проблема, не понял. Единственное заметное, что сделали в MariaDB и MySQL в последнее время — включили по умолчанию "строгий режим". Ранее СУБД по умолчанию использовали "нестрогий" режим, который прощал многие ошибки. Например, если вы пытались вставить в строчную колонку слишком длинное значение, СУБД просто обрезала его и давала предупреждение (которое в случае PHP обычно никак не видно на стороне PHP и никак не логгируется). Теперь же в "строгом" режиме, СУБД отказывается выполнять такие некорректные запросы.
https://mariadb.com/kb/en/library/sql-mode/
Обратите внимание, что там есть изменеия в 10.2.4:
From version Default sql_mode setting
MariaDB 10.2.4 STRICT_TRANS_TABLES, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION
Strict mode. Statements with invalid or missing data are aborted and rolled back, except that for non-transactional storage engines and statements affecting multiple rows where the invalid or missing data is not the first row, MariaDB will convert the invalid value to the closest valid value, or, if a value is missing, insert the column default value. Default since MariaDB 10.2.4.
Впрочем, это можно переключить в настройках. Не в этом ли было дело?
Ну и конечно, поражает качество разработки в Битриксе. Как вам этот гениальный запрос?
INSERT INTO b_iblock_element_property (ID, IBLOCK_ELEMENT_ID, IBLOCK_PROPERTY_ID, VAL UE, VALUE_NUM) SELECT 10555 ,2201 ,P.ID ,'3607' ,3607.0000 FR OM b_iblock_property P WHERE ID = 184
Подзапрос SELECT тут делается только для того, чтобы извлечь P.ID, который явно указан и равен 184. Или это:
$DB->Query("DELETE FROM ".$strTable." WHERE ID = ".$res["ID"]);
$results = $DB->Query("SELECT * FROM ".$strTable." WHERE ID = ".$res["ID"]);”
Эти гении отечественного программирования из Битрикса про плейсхолдеры или подготовленные запросы не слышали? При их подходе легко допустить инъекцию. Ну и в поддержку MariaDB надо слать итоговые запросы, а не этот кусок PHP-кода.
Ну и плохо конечно, что вы не смогли разобраться, в чем была причина проблемы.
MariaDB 10.2.4 STRICT_TRANS_TABLES, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION
Сразу после обновления зашел в админку одного из сайтов и сделал проверку. Удивился, что ругается на sql_mode который «должен быть пустым» по мнению 1С-Битрикс. Сразу же в my.conf поправил. Но дело явно было не в этом.
надо слать итоговые запросы, а не этот кусок PHP-кода
Отправил им в описании и запрос который не выполнился и то, что из поддержки Битрикс пришло. Но молодого человека из MariaDB это не возбудило.
Выше писали, что есть мэйл-листы и прочие способы связи с сообществом. Это я прекрасно знаю. Но уважаемые комментаторы упускают в рекомендациях одну деталь: Время. У меня более 100 сайтов по которым приходят данные для обновления и обновляться приходится через конвертацию в MyISAM и обратно в InnoDB. Меня в той ситуации могло спасти либо получение быстрого ответа типа «Дятел! Вон там строка в конфиге кривая — поменяй и все будет» или откат на предыдущую версию. Совета от авторов я не получил, а чтобы у сообщества была возможность подискутировать и через неопределенное время прийти к решению и возможно (если нужно) что-то поправить в коде я как раз и написал статью. Ну и конечно чтобы на мои грабли с обновлением не наступали ибо хостингов много, а серверов в организациях с битриксовыми сайтами еще больше и в преддверии прекращения поддержки битриксом MySQL 5.5 наступать будут многие…
В данном случае вы должны были сами выяснить причину проблемы. И только убедившись, что проблема в MariaDB, написав инструкции по воспроизведению бага на чистой базе, можно обращаться в общественную поддержку (в стиле: возьмите чистую базу, выполните запросы A, B, C и получите результат D, хотя по документации (ссылка) должно быть E). А если вы им дали невнятное описание в стиле "я установил такую-то систему от битрикс и что-то она не работает", то, увы, у них тоже времени нет разбираться в вашей проблеме за вас.
Я не могу утверждать, что баг именно в битриксе, но вероятность этого высока. Так как такой баг, как не-удаление данных командой DELETE все же был бы заметен большому числу пользователей.
у них тоже времени нет разбираться в вашей проблеме за вас
Понимаю и у меня нет никаких претензий к MariaDB, да и быть не может. Ребята — молодцы. Делают крутой продукт и предоставляют его всему миру. Просто у меня было 3 пути:
- Собирать инфу, пытаться разобраться (время), отправлять данные в сообщество и неопределенно долго ждать ответа (еще время)
- Молча откатиться и никого не напрягать (относительно быстро, но геморройно)
- Попробовать собрать что есть под рукой и если сходу никто ничего не подскажет — откатиться. Ну и в любом случае кто-то возможно обратит внимание на проблему и когда придет время — ей займутся и поправят.
Что касается «убедиться, что проблема в MariaDB» — тут лично для меня сложно. Не очень понимаю в разработке, поэтому доверился поддержке битрикс которая сказала, что проблема не на их стороне и они ее решать не будут. Так-то им и логи предоставили и доступ на сервер и в админки проблемных сайтов и детальное описание последовательности действий до и во время возникновения проблемы. И судя по их ответам, они все-же воспроизводили ошибку. И как мне кажется, могли бы учитывая сколько лицензий через нашу студию приобретено и преобретается, проявить немного больше внимания к технической проблеме. А так получается «купили лицензию? Молодцы! А теперь угадайте, на какой версии MariaDB купленный продукт заведется и будет стабильно работать».
А почему вы используете MariaDB вместо, например, Percona 8 ?
knutov Потому, что когда на чистый сервер ставишь ISPManager с ним в комплекте ставится именно MariaDB 5.x. Ну и пару лет назад я уже обновлялся при похожих обстоятельствах на 10.0 — тогда все прошло идеально гладко и никто даже испугаться не успел :-) Ну и как по мне — найти что почитать по MariaDB проще чем по всему остальному. Более распространенный вариант.
Битрикс и обновление MariaDB до последней стабильной версии