Вам нужны триггеры на ведомом сервере базы данных MySQL?

0

Предположим, что вы используете два сервера mysql: один - мастер, другой - подчиненный. Мастер имеет триггеры, которые устанавливают для столбцов обновления значение COUNT из числа строк в других таблицах. Например, у вас есть таблица новостей и таблица комментариев. В новостях содержится столбец INT с именем "total_comments", который увеличивается с помощью триггера каждый раз, когда новая строка помещается в "комментарии". Требуется ли подчиненному этот триггер (чтобы сохранить "news.total_comments" в актуальном состоянии), или ему будет предложено обновить соответствующий "news.total_comments" напрямую?

Теги:
replication

3 ответа

3
Лучший ответ

Из документов http://dev.mysql.com/doc/refman/5.0/en/faqs-triggers.html:

22.5.4: Как выполняются действия с помощью триггеров на главном реплицируется на подчиненный? Во-первых, триггеры, которые существуют на сервере, должны воссоздаваться на подчиненном сервере. Как только это будет сделано, репликация поток работает как любой другой стандарт DML выражение, которое участвует в Репликация. Например, рассмотрим таблица EMP, которая имеет вставку AFTER триггер, который существует на главном Сервер MySQL. Та же таблица EMP и ПОСЛЕ Вставки триггера существуют на подчиненного сервера. Репликация поток будет: Инструкция INSERT сделанных для ПУЭ. Триггер AFTER для EMP активируется. Инструкция INSERT записанный в двоичный журнал. ведомый репликации поднимает INSERT для EMP и выполняет его. ПОСЛЕ запуска на EMP, который существует ведомый активируется.

и

22.5.4 Действия, выполняемые с помощью триггеров мастера, не реплицируется на подчиненный сервер.

Таким образом, вам нужны триггеры на подчиненном устройстве.

2

Это зависит от используемой вами репликации. Если вы используете репликацию на основе инструкций, то вы должны использовать соответствующие триггеры в главном и подчиненном. Если вы используете репликацию на основе строк, то вы не должны включать триггеры на подчиненном устройстве.

1

У вас может быть действие запросов, созданных триггерами в двоичном журнале с объединенными таблицами (MySQL5), путем добавления той же таблицы с локальным подключением.

---------------------------------------------------------------------------------------
-- EXEMPLE :
-- We want install a replication of the table test_table that will be managed  by Trg_Update triggers.
---------------------------------------------------------------------------------------

Create database TEST;
USE TEST;
CREATE TABLE test_trigger (
    id     INT(20) NOT NULL AUTO_INCREMENT,
    name   VARCHAR(32) NOT NULL DEFAULT '',
    PRIMARY KEY  (id),
    INDEX name (name),
) ;

DELIMITER |
CREATE TRIGGER Trg_Update AFTER INSERT ON test_trigger
FOR EACH ROW BEGIN
INSERT INTO federated_table (name, other) values (NEW.name, ‘test trigger on federated table -> OK’)
END|
DELIMITER ;


CREATE TABLE test_table (
    id     INT(20) NOT NULL AUTO_INCREMENT,
    name   VARCHAR(32) NOT NULL DEFAULT '',
    other  VARCHAR(32) NOT NULL DEFAULT '',
    PRIMARY KEY  (id),
    INDEX name (name),
    INDEX other_key (other)
) ;


CREATE TABLE federated_table (
    id     INT(20) NOT NULL AUTO_INCREMENT,
    name   VARCHAR(32) NOT NULL DEFAULT '',
    other  VARCHAR(32) NOT NULL DEFAULT '',
    PRIMARY KEY  (id),
    INDEX name (name),
    INDEX other_key (other)
)
ENGINE=FEDERATED
CONNECTION='mysql://root@localhost/TEST/test_table';

---------------------------------------------------------------------------------------

Ещё вопросы

Сообщество Overcoder
Наверх
Меню