我试图通过触发器或存储过程将行插入表中,而不将任何数据写入二进制日志。这可能吗?我知道对于正常连接,您可以设置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
并写入二进制日志。
答案 0 :(得分:1)
如果您运行基于语句的复制,则会在主服务器和从服务器上执行触发器,但不会复制。也许这可以解决你的问题。
除此之外,它不允许在交易中更改sql_log_bin
所以我会说没有好办法让触发器不复制的效果使用基于行的复制时。