【问题标题】:MySQL Replication - Trigger wont replicate to slaveMySQL 复制 - 触发器不会复制到从站
【发布时间】:2012-03-21 16:48:16
【问题描述】:

好的,这是我的场景

服务器运行主数据库和每个站点的其他数据库也在服务器上。 将更新写入主数据库,并且触发器将此记录插入到特定站点的相关数据库中,该特定站点旨在复制到站点数据库级别。

触发器工作正常,但插入的记录没有进入从数据库。我使用基于语句的复制作为基于行的不是一个选项。我也尝试过调用存储过程并将其作为事件执行,但没有任何结果。

有什么办法可以解决这个问题-顺便说一下我使用的是 MySQL 5.1

谢谢

下面的触发器语法

dbmaster=服务器主数据库 dbsite= 服务器站点数据库(这是复制主机)

delimiter # 
create trigger rstreplicate after insert on dbmaster.exchange 
for each row begin insert into dbsite.exchange 
select distinct new.TYPE, new.FILENAME, new.STATUS, new.USER_ID, new.INP_DATE, new.CHG_DATE from dbmaster.exchange where new.IP='127.0.0.1'; 
end# 
delimiter ;

【问题讨论】:

    标签: mysql triggers replication replicate


    【解决方案1】:

    来自MySQL documentation

    B.5.12:触发器是否适用于复制?

    是的。但是,它们的工作方式取决于您是否使用 MySQL 的“经典”基于语句的复制在所有版本中都可用 MySQL 的版本,或引入的基于行的复制格式 MySQL 5.1。

    当使用基于语句的复制时,slave 上的触发器是 由在主服务器上执行的语句执行(并复制 给奴隶)。

    使用基于行的复制时,触发器不会在 slave 由于在 master 上运行的语句,然后 复制到从站。相反,当使用基于行的复制时, 应用在主控上执行触发器引起的更改 在奴隶上。

    因此,您需要将触发触发器的语句复制到从属设备,并且您需要在从属设备上创建重复的触发器,以应用相同的更新来响应语句。

    【讨论】:

    • 但是如果 dbmaster 在站点级别不存在,这会起作用吗?他们只使用 dbsite
    • 触发器不必完全匹配。根据复制的语句,根据需要对其进行修改以完成所需的更新。
    • 对不起,我不太明白 - 如果我们以上面的触发器为例,在站点级别我有我的数据库 dbsite 和我的交换表 - 我的触发器语法会是什么,与上面相同?再次感谢您对此的帮助
    • 这并没有真正把我带到任何地方:(
    猜你喜欢
    • 2011-12-31
    • 1970-01-01
    • 2013-04-20
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    相关资源
    最近更新 更多