基于语句复制
优点:简单 缺点:语句副作用,或者随时间改变返回值的函数的使用会导致复制的数据产生改变。
基于预写日志(WAL)传输
优点:解决基于语句复制的问题。 缺点:日志描述过于底层:哪些磁盘块的哪些字节发生了改变,和引擎实现高度耦合,不利于模式演进。
基于行的逻辑日志复制
用一系列记录来描述数据表行级别的写请求:
- 对于插入行,日志包含所有相关列的新值。
- 对于删除行,标记主键删除。
- 对于行货更新,记录主键和对应列的新值。
MySQL binlog 基于此模式。
优点:更利于模式演进,支持向后兼容,同时解耦特性引擎便于外部解析。
基于触发器的复制
触发器支持注册自己的应用层代码并在数据发生改变时被调用。
优点:将复制控制交给应用层,支持更高的灵活性。 缺点:开销更大,更容易出错。