运行触发器而不写入二进制日志

时间:2012-04-03 12:01:29

标签: mysql triggers binary-log

我试图通过触发器或存储过程将行插入表中,而不将任何数据写入二进制日志。这可能吗?我知道对于正常连接,您可以设置SQL_LOG_BIN=0来禁用连接的二进制日志记录,但是我无法使其适用于触发器。如果有一种方法可以使用联合引擎表执行此操作,那也可以。

修改

我几乎可以通过存储过程实现这一点:

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 个答案:

答案 0 :(得分:1)

如果您运行基于语句的复制,则会在主服务器和从服务器上执行触发器,但不会复制。也许这可以解决你的问题。

除此之外,它不允许在交易中更改sql_log_bin所以我会说没有好办法让触发器复制的效果使用基于行的复制时。