备份原理剖析

更新时间:2025-02-13 03:17:04

PolarDB集群的数据备份是指在某个时间点上对集群的全量数据进行备份,生成一个备份集(快照)。该备份过程采用ROW(Redirect-on-Write)快照机制,直接存储在PolarDB集群的分布式存储系统上。在保存备份时,数据并未被真正复制。而当数据块发生修改时,系统会将历史版本的数据块保留给快照,同时生成一个新的数据块被原数据引用(Redirect)。本文将详细介绍创建备份、删除备份以及在数据库内删除数据时数据块的变化过程。

创建一级备份

在创建一级备份时,该备份集仅引用PolarDB集群内的数据块,实际上并不占用存储空间。而是当数据块发生修改时,将历史版本的数据块转移到备份集中。

示例

假设某PolarDB集群在09:00、10:0011:00分别创建了数据备份。在创建数据备份之后,集群内数据经历了新增和修改的操作。对此,该集群数据备份的原理说明如下:

时间

动作

说明

时间

动作

说明

09:00

创建备份1

集群内存在三个数据块A、B、C。此时创建备份1,该备份集引用了集群中的数据块A、B、C,因此实际并不占用存储空间。

09:00~10:00

  • 修改数据块AA1

  • 修改数据块BB1

  • 新增数据块D

新增和修改操作时,集群会分配新的数据块分别保存A1、B1、D。原来的数据块A、B会转移到备份1中。

10:00

创建备份2

集群内存在四个数据块A1、B1、C、D。此时创建备份2,该备份集引用了集群中的数据块A1、B1、C、D,因此实际并不占用存储空间。

10:00~11:00

  • 修改数据块CC1

  • 新增数据块E

新增和修改操作时,集群会分配新的数据块分别保存C1、E。原来的数据块C会转移到备份2中。

11:00

创建备份3

集群内存在五个数据块A1、B1、C1、D、E。此时创建备份3,该备份集引用了集群中的数据块A1、B1、C1、D、E,因此实际并不占用存储空间。

下一个数据备份前

  • 修改数据块A1A2

  • 修改数据块EE1

修改操作时,集群会分配新的数据块分别保存A2、E1。原来的数据块A1、E会转移到备份3中。

此后依此类推。

image

删除一级备份

在删除一个备份集时,与该备份集共享的数据块会被转移至相应的数据备份集中,而无用的数据块则会被直接释放。

示例

假设某PolarDB集群存在三个数据备份:备份1、备份2和备份3,其包含的数据块示例如下:

  • 备份1:包含数据块A、B、C

    • 数据块A、B为自有数据块

    • 数据块C则来源于备份2

  • 备份2:包含数据块A1、B1、C、D

    • 数据块C为自有数据块

    • 数据块A1则来源于备份3

    • 数据块B1、D来源于主版本

  • 备份3:包含数据块A1、B1、C1、D、E

    • 数据块A1、E为自有数据块

    • 数据块B1、C1、D来源于主版本

说明
  • 当前示例数据来源于创建备份示例

  • 主版本为PolarDB集群内当前的数据版本,包含最新的所有数据块。

那么删除数据备份的原理说明如下:

  1. 在删除备份1时,数据块AB被直接释放。

  2. 在删除备份3时,数据块A1被备份2所需,因此被转移至备份2中,数据块E被直接释放。

  3. 在删除备份2时,数据块A1、C被直接释放。

image

删除数据库内数据

PolarDB集群内删除数据表时,主版本将释放对应表所包含的数据块,并将这些数据块保留至备份集中。

说明

主版本为PolarDB集群内当前的数据版本,包含最新的所有数据块。

示例

假设某PolarDB集群有一个备份1,包含数据块A、B、C、D、E,均来源于主版本。

在某个时刻,PolarDB集群释放了数据块B、C、D、E。此时,数据库块B、C、D、E将被转移至备份1,因此会出现在主版本数据清理后存储空间大小上涨的情况。

当备份1过期后,数据块B、C、D、E才会被真正释放,此时存储空间将减少。

image
  • 本页导读 (1)
  • 创建一级备份
  • 示例
  • 删除一级备份
  • 示例
  • 删除数据库内数据
  • 示例

点击开启售前

在线咨询服务