TiDB备份与恢复简介

本文档介绍如何对 Kubernetes 上的 TiDB 集群进行数据备份和数据恢复。备份与恢复中所使用的工具有 DumplingTiDB Lightning 和 BR

Dumpling 是一个数据导出工具,该工具可以把存储在 TiDB/MySQL 中的数据导出为 SQL 或者 CSV 格式,可以用于完成逻辑上的全量备份或者导出。

TiDB Lightning 是一个数据导入工具,该工具可以把 Dumpling 或 CSV 输出格式的数据快速导入到 TiDB 中,可以用于完成逻辑上的全量恢复或者导入。

BR 是 TiDB 分布式备份恢复的命令行工具,用于对 TiDB 集群进行数据备份和恢复。相比 Dumpling 和 Mydumper,BR 更适合大数据量的场景,BR 只支持 TiDB v3.1 及以上版本。如果需要对延迟不敏感的增量备份,请参阅 BR。如果需要实时的增量备份,请参阅 TiCDC

使用场景

数据备份

如果你对数据备份有以下要求,可考虑使用 BR 对 TiDB 进行数据备份:

  • 备份的数据量较大(大于 1 TB),而且要求备份速度较快
  • 直接备份数据的 SST 文件(键值对)
  • 对延迟不敏感的增量备份

BR 相关使用文档可参考:

如果你对数据备份有以下要求,可考虑使用 Dumpling 对 TiDB 进行数据备份:

  • 导出 SQL 或 CSV 格式的数据
  • 对单条 SQL 语句的内存进行限制
  • 导出 TiDB 的历史数据快照

Dumpling 相关使用文档可参考:

数据恢复

如果你需要从由 BR 备份出的 SST 文件对 TiDB 进行数据恢复,则应使用 BR。相关使用文档可参考:

如果你需要从由 Dumpling 导出的或其他格式兼容的 SQL 或 CSV 文件对 TiDB 进行数据恢复,则应使用 TiDB Lightning。相关使用文档可参考:

备份与恢复过程

为了对 Kubernetes 上的 TiDB 集群进行数据备份,用户需要创建一个自定义的 Backup Custom Resource (CR) 对象来描述一次备份,或者创建一个自定义的 BackupSchedule CR 对象来描述一个定时备份。

为了对 Kubernetes 上的 TiDB 集群进行数据恢复,用户可以通过创建一个自定义的 Restore CR 对象来描述一次恢复。

在创建完对应的 CR 对象后,TiDB Operator 将根据相应配置并选择对应的工具执行备份或恢复。

删除备份的 Backup CR

用户可以通过下述语句来删除对应的备份 CR 或定时全量备份 CR。

 

kubectl delete backup ${name} -n ${namespace} kubectl delete backupschedule ${name} -n ${namespace}

如果你使用 v1.1.2 及以前版本,或使用 v1.1.3 及以后版本并将 spec.cleanPolicy 设置为 Delete 时,TiDB Operator 在删除 CR 时会同时清理备份文件。

在满足上述条件时,如果需要删除 namespace,建议首先删除所有的 Backup/BackupSchedule CR,再删除 namespace。

如果直接删除存在 Backup/BackupSchedule CR 的 namespace,TiDB Operator 会持续尝试创建 Job 清理备份的数据,但因为 namespace 处于 Terminating 状态而创建失败,从而导致 namespace 卡在该状态。

这时需要通过下述命令删除 finalizers

 

kubectl patch -n ${namespace} backup ${name} --type merge -p '{"metadata":{"finalizers":[]}}'

清理备份文件

TiDB Operator v1.2.3 及之前的版本,清理备份文件的方式为:循环删除备份文件,一次删除一个文件。

TiDB Operator v1.2.4 及以后的版本,清理备份文件的方式为:循环删除备份文件,一次批量删除多个文件。对于每次批量删除多个文件的操作,根据备份使用的后端存储类型的不同,删除方式不同。

  • S3 兼容的后端存储采用并发批量删除方式。TiDB Operator 启动多个 Go 协程,每个 Go 协程每次调用批量删除接口 "DeleteObjects" 来删除多个文件。
  • 其他类型的后端存储采用并发删除方式。TiDB Operator 启动多个 Go 协程,每个 Go 协程每次删除一个文件。

对于 TiDB Operator v1.2.4 及以后的版本,你可以使用 Backup CR 中的以下字段控制清理行为:

  • .spec.cleanOption.pageSize:指定每次批量删除的文件数量。默认值为 10000。

  • .spec.cleanOption.disableBatchConcurrency:当设置为 true 时,TiDB Operator 会禁用并发批量删除方式,使用并发删除方式。

    如果 S3 兼容的后端存储不支持 DeleteObjects 接口,默认的并发批量删除会失败,需要配置该字段为 true 来使用并发删除方式。

  • .spec.cleanOption.batchConcurrency: 指定并发批量删除方式下启动的 Go 协程数量。默认值为 10。

  • .spec.cleanOption.routineConcurrency: 指定并发删除方式下启动的 Go 协程数量。默认值为 100。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
TiDB(Tai Yun DataBase)和Oracle都是关系型数据库管理系统(RDBMS),但在以下几个方面有很大的不同。 1. 架构TiDB是一个分布式数据库,它使用了分布式事务和分布式计算的技术,能够水平扩展和并行处理大规模数据集。而Oracle是一个传统的集中式数据库,依靠主机的性能来处理数据。 2. 扩展性:由于TiDB是分布式数据库,它可以通过添加更多的节点来增加系统的吞吐量和存储容量,实现更好的可伸缩性。Oracle的扩展性有限,它需要更强大的硬件来处理更大的数据量。 3. 数据一致性:TiDB使用一致性哈希算法将数据分散到集群的各个节点上,确保数据的一致性和可靠性。而Oracle使用基于行的复制方式,需要在节点间进行数据同步,容易引起数据一致性问题。 4. SQL兼容性:Oracle是非常成熟的数据库系统,对SQL标准的支持较好,并且提供了许多高级功能和扩展。TiDB也兼容MySQL的SQL语法和API,但在一些复杂的SQL查询中可能会出现一些不兼容的情况。 5. 性能:由于TiDB的分布式计算和分布式存储能力,它可以在大规模数据集上提供更好的性能和查询效率。而Oracle在小型和中型数据库上的性能表现更好。 总的来说,TiDB适用于需要处理大规模数据和高并发的场景,而Oracle适用于需要高度安全性和稳定性的企业级应用。选择哪个数据库取决于具体的需求和预算。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天读点书学堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值