запустить триггер без записи в двоичный журнал - PullRequest
1 голос
/ 03 апреля 2012

Я пытаюсь вставить строки в таблицу с помощью триггера или хранимой процедуры без записи каких-либо данных в двоичный журнал.Это возможно?Я знаю, что для обычных подключений вы можете установить SQL_LOG_BIN=0, чтобы отключить двоичное ведение журнала для подключения, но я не смог заставить это работать для триггеров.Если есть способ сделать это с помощью объединенной таблицы механизмов, это также будет нормально.

edit:

Я могу почти выполнить это с помощью хранимой процедуры:

CREATE PROCEDURE nolog_insert(`id` INT, `data` blob)
BEGIN
  SET SESSION SQL_LOG_BIN = 0;
  INSERT INTO `table` (`id`, `data`) VALUES (id, data);
  SET SESSION SQL_LOG_BIN = 1;
END

Я вставляю запись, вызывая процедуру из приглашения mysql:

call nolog_insert(50, 'notlogged');

Как и ожидалось, запись (50, 'notlogged') вставляется в table, но не записываетсяв двоичный журнал.

Однако я хочу запустить эту процедуру из триггера.При использовании триггера:

create trigger my_trigger before insert on blackhole_table for each row call nolog_insert(new.id, new.data);

Данные одновременно вставляются в table и записываются в двоичный журнал.

1 Ответ

1 голос
/ 18 марта 2014

Если вы запускаете репликацию на основе операторов , триггеры выполняются как на главном, так и на ведомом устройствах, но не реплицируются. Возможно, это решит вашу проблему.

Кроме этого, нельзя изменять sql_log_bin внутри транзакции, поэтому я бы сказал, что нет хорошего способа воспроизвести эффекты триггера , а не , при использовании на основе строк репликация .

...