数据复制服务 DRS-为什么实时灾备任务不支持触发器(TRIGGER)和事件(EVENT)
为什么实时灾备任务不支持触发器(TRIGGER)和事件(EVENT)
数据库的触发器(TRIGGER)和事件(EVENT)操作会记录binlog,DRS通过解析binlog同步数据,如果业务侧写入与触发器、事件存在同样对象,就会发生重复执行导致数据不一致或者任务失败,所以在灾备场景下,触发器和事件是不支持的。
假如源库表user存在这样触发器,当表user写入数据时,触发器会同步往另一个log表中写入一条日志数据。
当源库业务侧写入了一条数据到user表。
触发器同步了这条数据到log表,此时binlog中会有两条数据,如下图,第一条就是业务插入user表的数据,第二条是触发器被触发,写入到log中的数据。
DRS同步数据的时候可能会出现以下情况:
- 如果先同步了插入的数据到目标库user表,这时候目标数据库的触发器被触发,目标库log表会自动写入,当同步第二条log表数据时,就无法将这条log表数据写到目标库了,数据冲突任务报错。
- 如果先同步log表中的数据,再同步user表的数据时,这时候目标数据库的触发器被触发,会导致log表多一条数据,发生数据不一致问题。
同理,事件(EVENT)也会记录binlog并在目标库再次执行,这也会导致上述问题。
DRS实时迁移支持触发器和事件,是因为DRS会在结束任务的时候去迁移触发器和事件,在结束任务成功的时候保证目标库和源库的对象一致。
- 数据复制服务DRS_云数据库_自建数据库迁移上云
- 自建数据库迁移上云_IDC数据库上云_ECS自建数据库
- 云数据库RDS for MySQL版本升级_MySQL版本_升级数据库版本
- 什么是函数工作流_functiongraph是什么_函数工作流服务
- 数据转发至函数工作流_数据处理_FunctionGraph处理流数据
- 数据库如何迁移上云
- 使用SpringBoot构建HTTP函数_functiongraph_函数工作流
- 使用FunctionGraph构建自己的ChatGPT_函数工作流_华为云FunctionGraph-华为云
- 什么是函数工作流_函数托管计算服务_函数工作流 FunctionGraph-华为云
- 使用容器镜像部署函数_函数部署_函数工作流 FunctionGraph-华为云