在 MySQL REPLICATE 上取消 DELETE
Cancel DELETE on MySQL REPLICATE
我正在寻找一种方法来防止在 MySQL 复制 Master/Slave 上使用 DELETE 语句。
在我的例子中,Master 是一个实时数据库,有新的条目(不超过一周),Slave 是一个存档数据库,它必须包含所有条目。
我的测试有几个问题:
- 如果我在 Slave BEFORE DELETE 触发器中引发异常,例如
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'DELETE canceled';
SQL 异常引发错误并停止我的 Slave。
- 如果我发出警告,Slave 会保留 运行 但不会取消删除
- 我无法修改 MySQL 的 my.cnf。
- 我不能使用布尔属性在master上隐藏,在slave上显示(主数据库必须尽可能少)。
几天来我一直在绞尽脑汁,我运行没主意了...
您最好将删除写入审计 table。
阻止从属删除的问题是:如果您尝试插入一个带有 pk 的行,而该行已在主控中删除,并且如果您以某种方式阻止了从属中的删除,则插入将在从属中失败。
您可以在具有相同结构的不同 table 中跟踪已删除的行。
http://www.techonthenet.com/mysql/triggers/before_delete.php
CREATE TRIGGER audit_before_delete
BEFORE DELETE
ON yourtable FOR EACH ROW
BEGIN
-- Find the deleted row and insert record into audit table
-- insert into yourtable_audit values (old.id, old.name, old.description);
END;
我正在寻找一种方法来防止在 MySQL 复制 Master/Slave 上使用 DELETE 语句。
在我的例子中,Master 是一个实时数据库,有新的条目(不超过一周),Slave 是一个存档数据库,它必须包含所有条目。
我的测试有几个问题:
- 如果我在 Slave BEFORE DELETE 触发器中引发异常,例如
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'DELETE canceled';
SQL 异常引发错误并停止我的 Slave。
- 如果我发出警告,Slave 会保留 运行 但不会取消删除
- 我无法修改 MySQL 的 my.cnf。
- 我不能使用布尔属性在master上隐藏,在slave上显示(主数据库必须尽可能少)。
几天来我一直在绞尽脑汁,我运行没主意了...
您最好将删除写入审计 table。
阻止从属删除的问题是:如果您尝试插入一个带有 pk 的行,而该行已在主控中删除,并且如果您以某种方式阻止了从属中的删除,则插入将在从属中失败。
您可以在具有相同结构的不同 table 中跟踪已删除的行。
http://www.techonthenet.com/mysql/triggers/before_delete.php
CREATE TRIGGER audit_before_delete
BEFORE DELETE
ON yourtable FOR EACH ROW
BEGIN
-- Find the deleted row and insert record into audit table
-- insert into yourtable_audit values (old.id, old.name, old.description);
END;