mysql数据库从属服务器上是否需要触发器?

mysql数据库从属服务器上是否需要触发器?,mysql,replication,Mysql,Replication,假设您正在运行两个mysql服务器:一个是主服务器,另一个是从服务器。master设置了触发器,这些触发器使用其他表中的行数更新列。例如,您有一个新闻表和一个评论表。News包含一个名为“total\u comments”的INT列,每当新行放入“comments”时,该列通过触发器递增。从属服务器是否也需要此触发器(以使“News.total\u comments”保持最新状态),还是会被告知更新相应的“News.total\u comments”直接?这取决于您正在使用的复制。如果使用基于语

假设您正在运行两个mysql服务器:一个是主服务器,另一个是从服务器。master设置了触发器,这些触发器使用其他表中的行数更新列。例如,您有一个新闻表和一个评论表。News包含一个名为“
total\u comments
”的INT列,每当新行放入“comments”时,该列通过触发器递增。从属服务器是否也需要此触发器(以使“
News.total\u comments
”保持最新状态),还是会被告知更新相应的“
News.total\u comments
”直接?

这取决于您正在使用的复制。如果使用基于语句的复制,则必须在主服务器和从服务器中使用匹配的触发器。如果使用基于行的复制,则不能在从属设备上包含触发器。

这取决于所使用的复制。如果使用基于语句的复制,则必须在主服务器和从服务器中使用匹配的触发器。如果使用基于行的复制,则不能在从机上包含触发器。

文档:

22.5.4:如何通过主机上的触发器执行操作 复制到一个奴隶?首先是 主机上存在的触发器必须 将在从属服务器上重新创建。 完成此操作后,复制 flow与任何其他标准DML一样工作 参与 复制。例如,考虑一个 具有AFTER insert的表EMP 触发器,它存在于主机上 MySQL服务器。相同的EMP表和 在插入触发器之后,在 从服务器也是如此。复制 流程应该是:插入语句是 按EMP制作。电磁脉冲的后触发 激活。INSERT语句是 写入二进制日志。这个 复制从机拾取插入 语句,并执行它。这个 在上存在的EMP上触发后 从机启动

22.5.4通过主机上的触发器执行的操作不受限制 复制到从属服务器

因此,您确实需要从机上的触发器。

来自文档:

22.5.4:如何通过主机上的触发器执行操作 复制到一个奴隶?首先是 主机上存在的触发器必须 将在从属服务器上重新创建。 完成此操作后,复制 flow与任何其他标准DML一样工作 参与 复制。例如,考虑一个 具有AFTER insert的表EMP 触发器,它存在于主机上 MySQL服务器。相同的EMP表和 在插入触发器之后,在 从服务器也是如此。复制 流程应该是:插入语句是 按EMP制作。电磁脉冲的后触发 激活。INSERT语句是 写入二进制日志。这个 复制从机拾取插入 语句,并执行它。这个 在上存在的EMP上触发后 从机启动

22.5.4通过主机上的触发器执行的操作不受限制 复制到从属服务器


因此,您确实需要从机上的触发器。

通过添加具有本地连接的同一个表,您可以在具有联邦表的二进制日志(MySQL5)中执行触发器发出的请求操作

---------------------------------------------------------------------------------------
-- EXEMPLE :
-- We want install a replication of the table test_table that will be managed  by Trg_Update triggers.
---------------------------------------------------------------------------------------

Create database TEST;
USE TEST;
CREATE TABLE test_trigger (
    id     INT(20) NOT NULL AUTO_INCREMENT,
    name   VARCHAR(32) NOT NULL DEFAULT '',
    PRIMARY KEY  (id),
    INDEX name (name),
) ;

DELIMITER |
CREATE TRIGGER Trg_Update AFTER INSERT ON test_trigger
FOR EACH ROW BEGIN
INSERT INTO federated_table (name, other) values (NEW.name, ‘test trigger on federated table -> OK’)
END|
DELIMITER ;


CREATE TABLE test_table (
    id     INT(20) NOT NULL AUTO_INCREMENT,
    name   VARCHAR(32) NOT NULL DEFAULT '',
    other  VARCHAR(32) NOT NULL DEFAULT '',
    PRIMARY KEY  (id),
    INDEX name (name),
    INDEX other_key (other)
) ;


CREATE TABLE federated_table (
    id     INT(20) NOT NULL AUTO_INCREMENT,
    name   VARCHAR(32) NOT NULL DEFAULT '',
    other  VARCHAR(32) NOT NULL DEFAULT '',
    PRIMARY KEY  (id),
    INDEX name (name),
    INDEX other_key (other)
)
ENGINE=FEDERATED
CONNECTION='mysql://root@localhost/TEST/test_table';

---------------------------------------------------------------------------------------

通过添加具有本地连接的同一个表,可以在二进制日志和联邦表(MySQL5)中执行触发器发出的请求操作

---------------------------------------------------------------------------------------
-- EXEMPLE :
-- We want install a replication of the table test_table that will be managed  by Trg_Update triggers.
---------------------------------------------------------------------------------------

Create database TEST;
USE TEST;
CREATE TABLE test_trigger (
    id     INT(20) NOT NULL AUTO_INCREMENT,
    name   VARCHAR(32) NOT NULL DEFAULT '',
    PRIMARY KEY  (id),
    INDEX name (name),
) ;

DELIMITER |
CREATE TRIGGER Trg_Update AFTER INSERT ON test_trigger
FOR EACH ROW BEGIN
INSERT INTO federated_table (name, other) values (NEW.name, ‘test trigger on federated table -> OK’)
END|
DELIMITER ;


CREATE TABLE test_table (
    id     INT(20) NOT NULL AUTO_INCREMENT,
    name   VARCHAR(32) NOT NULL DEFAULT '',
    other  VARCHAR(32) NOT NULL DEFAULT '',
    PRIMARY KEY  (id),
    INDEX name (name),
    INDEX other_key (other)
) ;


CREATE TABLE federated_table (
    id     INT(20) NOT NULL AUTO_INCREMENT,
    name   VARCHAR(32) NOT NULL DEFAULT '',
    other  VARCHAR(32) NOT NULL DEFAULT '',
    PRIMARY KEY  (id),
    INDEX name (name),
    INDEX other_key (other)
)
ENGINE=FEDERATED
CONNECTION='mysql://root@localhost/TEST/test_table';

---------------------------------------------------------------------------------------