基于语句复制

优点:简单 缺点:语句副作用,或者随时间改变返回值的函数的使用会导致复制的数据产生改变。

基于预写日志(WAL)传输

优点:解决基于语句复制的问题。 缺点:日志描述过于底层:哪些磁盘块的哪些字节发生了改变,和引擎实现高度耦合,不利于模式演进。

基于行的逻辑日志复制

用一系列记录来描述数据表行级别的写请求:

  1. 对于插入行,日志包含所有相关列的新值。
  2. 对于删除行,标记主键删除。
  3. 对于行货更新,记录主键和对应列的新值。

MySQL binlog 基于此模式。

优点:更利于模式演进,支持向后兼容,同时解耦特性引擎便于外部解析。

基于触发器的复制

触发器支持注册自己的应用层代码并在数据发生改变时被调用。

优点:将复制控制交给应用层,支持更高的灵活性。 缺点:开销更大,更容易出错。