При обновлении старых версий битрикса можно столкнуться с ошибкой

Некоторые обновления не были установлены

Ошибка в updater’e 18.5.500 модуля main: [1786] Statement violates GTID consistency: CREATE TABLE … SELECT.. Установка обновлений модуля main прервана. [CL04] Ошибка обновления модулей.

Проблема возникает, если вы используете репликацию MySQL на базе GTID. Конструкция СREATE TABLE … SELECT запрещена, т.к. существует неоднозначность при записи этой транзакции в binlog в зависимости от настроек мастера и слейва.

Проблемный запрос:

CREATE TABLE b_option_site
(
    MODULE_ID VARCHAR(50) not null,
    NAME VARCHAR(50) not null,
    SITE_ID CHAR(2) not null,
    VALUE TEXT,
    PRIMARY KEY(MODULE_ID, NAME, SITE_ID),
    INDEX ix_option_site_module_site(MODULE_ID, SITE_ID)
)
SELECT MODULE_ID, NAME, SITE_ID, VALUE
FROM b_option
WHERE SITE_ID IS NOT NULL

Необходимо разбить его 2 отдельных — для создания и вставки данных:

CREATE TABLE b_option_site
(
    MODULE_ID VARCHAR(50) not null,
    NAME VARCHAR(50) not null,
    SITE_ID CHAR(2) not null,
    VALUE TEXT,
    PRIMARY KEY(MODULE_ID, NAME, SITE_ID),
    INDEX ix_option_site_module_site(MODULE_ID, SITE_ID)
);

INSERT INTO b_option_site
    SELECT MODULE_ID, NAME, SITE_ID, VALUE FROM b_option
    WHERE SITE_ID IS NOT NULL;
            

Updater битрикса содержит в себе проверку на существование таблицы, поэтому после ручного создания обновление продолжится.

Подобная ошибка встречается только в версии 18.5.500 модуля main.

Больше статей и материалов по web-разработке в tg-канале - подписывайтесь!

Подписаться в telegram

Добавить комментарий

Ваш адрес email не будет опубликован.