在 MongoDB 中,Oplog(操作日志)是一个特殊的固定集合(capped collection),位于 local 数据库中。它的主要作用是记录所有对数据库执行的写操作(如插入、更新和删除等)。Oplog 在 MongoDB 的复制集(Replica Set)环境中扮演着至关重要的角色。以下是 Oplog 的几个关键作用:
-
复制:
- 当一个写操作在一个主节点(Primary)上发生时,该操作会被记录到 Oplog 中。
- 从节点(Secondary)会定期检查 Oplog,并将这些操作应用到它们自己的数据集中,以此来保持与主节点的数据同步。
-
恢复:
- 如果从节点因为某些原因而落后于主节点,它可以通过重放 Oplog 来追赶并重新达到一致状态。
- 在某些情况下,例如网络中断后,当连接恢复时,从节点可以使用 Oplog 来恢复其数据集到最新的状态。
-
故障转移:
- 当主节点出现故障时,复制集中的其他成员会选举出一个新的主节点。新选出的主节点需要有一个完整的 Oplog 来确保没有丢失任何写操作。
- Oplog 的大小和保留时间决定了在故障转移过程中可能需要回滚的时间窗口。
-
变更流:
- Oplog 也可以被应用程序用来跟踪数据库的变化。通过监听 Oplog,开发者可以构建实时的应用特性,比如实时分析或触发外部系统的工作流。
-
备份和恢复:
- 在进行点对点备份(Point-in-Time Recovery, PITR)时,Oplog 可以帮助恢复到某个特定的时间点。
- 通过结合全量备份和 Oplog 的增量信息,可以精确地恢复到任意时刻的状态。
Oplog 的大小通常是固定的,这意味着它只保存一定时间段内的操作。一旦达到 Oplog 的最大容量,旧的操作记录就会被新的记录覆盖。因此,在设计复制集时,根据业务需求合理配置 Oplog 的大小是很重要的,以便在故障转移或恢复过程中有足够的历史数据可用。