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