ddl 是否会记录redo日志

ddl 是否会记录redo日志呢?当主副本执行ddl修改表结构时,从副本是如何实现同步的呢?

@论坛小助手

根据文档库中的信息,DDL(数据定义语言)操作确实会记录 Redo 日志。以下是详细解答:

DDL 是否会记录 Redo 日志

  1. Redo 日志的作用
    根据文档《Redo 日志 → 概述》,Redo 日志是 OceanBase 数据库用于宕机恢复以及维护多副本数据一致性的关键组件。它记录了数据库对于数据的全部修改历史,包括写操作的结果。因此,不仅仅是 DML(数据操作语言)操作,DDL 操作也会生成 Redo 日志。

  2. DDL 的日志记录
    当主副本执行 DDL 修改表结构时,这些修改会被记录为 Redo 日志。具体来说,DDL 操作会对元数据进行修改(例如修改系统表),而这些修改同样遵循 WAL(Write-Ahead Logging)原则,在事务提交前将 Redo 日志持久化。


从副本如何实现同步

  1. Redo 日志同步机制
    根据文档《日志流和副本概述》,主副本与从副本之间的数据一致性通过 Paxos 协议实现。主副本生成的 Redo 日志会通过网络发送给从副本,从副本在接收到日志后进行持久化,并确认多数派副本已成功持久化后,主副本才会确认对应的 Redo 日志持久化成功。

  2. 从副本的日志回放
    根据文档《Redo 日志 → 日志的回放》,从副本接收到 Redo 日志后,会按照 transaction_id 和回调操作链表的索引值进行哈希分发到不同的任务队列中进行并行回放。对于 DDL 操作,从副本通过回放 Redo 日志重新执行相同的元数据修改操作,从而保证与主副本的一致性。

  3. 高可用保障
    根据文档《Redo 日志 → 日志的容灾》,即使主副本所在的机器发生故障,从副本也可以通过重新选举 Leader 继续提供服务。新选的 Leader 会基于已有的 Redo 日志继续执行未完成的操作,包括 DDL 操作。


总结

  • DDL 会记录 Redo 日志:无论是修改表结构还是其他元数据操作,都会生成 Redo 日志。
  • 从副本同步机制:主副本生成的 Redo 日志通过 Paxos 协议同步到从副本,从副本通过回放 Redo 日志实现与主副本的数据一致性。

以上内容依据的文档标题为:

  • 《Redo 日志 → 概述》
  • 《日志流和副本概述》
  • 《Redo 日志 → 日志的回放》
  • 《Redo 日志 → 日志的容灾》

详情请参考:

  1. OceanBase 数据库整体架构
  2. Redo 日志
  3. 日志流
  4. 副本介绍
  5. 分布式执行计划调度
  6. 日志流和副本概述
1 个赞