1

我试图通过触发器或存储过程将行插入表中,而不将任何数据写入二进制日志。这可能吗?我知道对于正常连接,您可以设置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并写入二进制日志。

4

1 回答 1

1

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

除此之外,不允许sql_log_bin在事务内部进行更改,所以我想说,在使用基于行的复制时,没有好的方法可以使触发器的效果被复制。

于 2014-03-18T19:17:01.030 回答