https://docs.pingcap.com/zh/tidb/v4.0/sql-statement-restore

RESTORE 语句用于执行分布式恢复,把 BACKUP 语句生成的备份文件恢复到 TiDB 集群中。

RESTORE 语句使用的引擎与 BR 相同,但恢复过程是由 TiDB 本身驱动,而非单独的 BR 工具。BR 工具的优势和警告也适用于 RESTORE 语句。需要注意的是,RESTORE 语句目前不遵循 ACID 原则。

执行 RESTORE 语句前,确保集群已满足以下要求:

  • 集群处于“下线”状态,当前的 TiDB 会话是唯一在访问待恢复表的活跃 SQL 连接。
  • 执行全量恢复时,确保即将恢复的表不存在于集群中,因为现有的数据可能被覆盖,从而导致数据与索引不一致。
  • 执行增量恢复时,表的状态应该与创建备份时 LAST_BACKUP 时间戳的状态完全一致。

执行 RESTORE 需要 SUPER 权限。此外,执行恢复操作的 TiDB 节点和集群中的所有 TiKV 节点都必须有对目标存储的读权限。

RESTORE 语句开始执行后将会被阻塞,直到整个恢复任务完成、失败或取消。因此,执行 RESTORE 时需要准备一个持久的连接。如需取消任务,可执行 KILL TIDB QUERY 语句。

一次只能执行一个 BACKUP 和 RESTORE 任务。如果 TiDB server 上已经在执行一个 BACKUP 或 RESTORE 语句,新的 RESTORE 将等待前面所有的任务完成后再执行。

RESTORE 只能在 "tikv" 存储引擎上使用,如果使用 "mocktikv" 存储引擎,RESTORE 操作会失败。

语法图

语法图代码
RestoreStmt
RESTOREBRIETablesFROMstringLitRestoreOption
BRIETables
DATABASE*DBName,TABLETableNameList
RestoreOption
RATE_LIMIT=LengthNumMB/SECONDCONCURRENCY=LengthNumCHECKSUM=BooleanSEND_CREDENTIALS_TO_TIKV=Boolean
Boolean
NUMTRUEFALSE

示例

从备份文件恢复

RESTORE DATABASE * FROM 'local:///mnt/backup/2020/04/';
+------------------------------+-----------+----------+---------------------+---------------------+ | Destination | Size | BackupTS | Queue Time | Execution Time | +------------------------------+-----------+----------+---------------------+---------------------+ | local:///mnt/backup/2020/04/ | 248665063 | 0 | 2020-04-21 17:16:55 | 2020-04-21 17:16:55 | +------------------------------+-----------+----------+---------------------+---------------------+ 1 row in set (28.961 sec)

上述示例中,所有数据均从本地的备份文件中恢复到集群中。RESTORE 从 SST 文件里读取数据,SST 文件存储在所有 TiDB 和 TiKV 节点的 /mnt/backup/2020/04/ 目录下。

输出结果的第一行描述如下:

列名 描述
Destination 读取的目标存储 URL
Size 备份文件的总大小,单位为字节
BackupTS 不适用
Queue Time RESTORE 任务开始排队的时间戳(当前时区)
Execution Time RESTORE 任务开始执行的时间戳(当前时区)

部分恢复

你可以指定恢复部分数据库或部分表数据。如果备份文件中缺失了某些数据库或表,缺失的部分将被忽略。此时,RESTORE 语句不进行任何操作即完成执行。

RESTORE DATABASE `test` FROM 'local:///mnt/backup/2020/04/';
RESTORE TABLE `test`.`sbtest01`, `test`.`sbtest02` FROM 'local:///mnt/backup/2020/04/';

外部存储

BR 支持从 Amazon S3 或 Google Cloud Storage (GCS) 恢复数据:

RESTORE DATABASE * FROM 's3://example-bucket-2020/backup-05/?region=us-west-2';

有关详细的 URL 语法,见外部存储

当运行在云环境中时,不能分发凭证,可设置 SEND_CREDENTIALS_TO_TIKV 选项为 FALSE

RESTORE DATABASE * FROM 's3://example-bucket-2020/backup-05/?region=us-west-2' SEND_CREDENTIALS_TO_TIKV = FALSE;

性能调优

如果你需要减少网络带宽占用,可以通过 RATE_LIMIT 来限制每个 TiKV 节点的平均下载速度。

默认情况下,每个 TiKV 节点上运行 128 个恢复线程。可以通过 CONCURRENCY 选项来调整这个值。

在恢复完成之前,RESTORE 将对备份文件中的数据进行校验,以验证数据的正确性。如果你确信无需进行校验,可以通过 CHECKSUM 选项禁用这一步骤。

RESTORE DATABASE * FROM 's3://example-bucket-2020/backup-06/' RATE_LIMIT = 120 MB/SECOND CONCURRENCY = 64 CHECKSUM = FALSE;

增量恢复

增量恢复没有特殊的语法。TiDB 将识别备份文件属于全量备份或增量备份,然后执行对应的恢复操作,用户只需按照正确顺序进行增量恢复。

假设按照如下方式创建一个备份任务:

BACKUP DATABASE `test` TO 's3://example-bucket/full-backup' SNAPSHOT = 413612900352000; BACKUP DATABASE `test` TO 's3://example-bucket/inc-backup-1' SNAPSHOT = 414971854848000 LAST_BACKUP = 413612900352000; BACKUP DATABASE `test` TO 's3://example-bucket/inc-backup-2' SNAPSHOT = 416353458585600 LAST_BACKUP = 414971854848000;

在恢复备份时,需要采取同样的顺序:

RESTORE DATABASE * FROM 's3://example-bucket/full-backup'; RESTORE DATABASE * FROM 's3://example-bucket/inc-backup-1'; RESTORE DATABASE * FROM 's3://example-bucket/inc-backup-2';

MySQL 兼容性

该语句是 TiDB 对 MySQL 语法的扩展。

另请参阅

[转帖]tidb RESTORE的更多相关文章

  1. [转帖][分享] 关于系统DIY--by 原罪

    http://wuyou.net/forum.php?mod=viewthread&tid=399277&extra=page%3D1 前几天我发了一个帖子<Windows组件w ...

  2. TiDB集群安装主要操作

    TiDB集群安装主要操作 参考资料:https://www.cnblogs.com/plyx/archive/2018/12/21/10158615.html 一.TiDB数据简介 TiDB 是 Pi ...

  3. 探索TiDB Lightning的源码来解决发现的bug

    背景 上一篇<记一次简单的Oracle离线数据迁移至TiDB过程>说到在使用Lightning导入csv文件到TiDB的时候发现了一个bug,是这样一个过程. Oracle源库中表名都是大 ...

  4. TiDB上百T数据拆分实践

    背景 提高TiDB可用性,需要把多点已有上百T TiDB集群拆分出2套 挑战 1.现有需要拆分的12套TiDB集群的版本多(4.0.9.5.1.1.5.1.2都有),每个版本拆分方法存在不一样 2.其 ...

  5. TiDB Lightning导入超大型txt文件实践

    背景 TiDB 提供了很多种数据迁移的方式,但这些工具/方案普遍对MySQL比较友好,一旦涉及到异构数据迁移,就不得不另寻出路,借助各种开源或商业的数据同步工具.其实数据在不同系统的流转当中,有一种格 ...

  6. [LeetCode] Restore IP Addresses 复原IP地址

    Given a string containing only digits, restore it by returning all possible valid IP address combina ...

  7. canvas的save与restore方法的作用

    网上搜罗了一堆资料,最后总结一下. save:用来保存Canvas的状态.save之后,可以调用Canvas的平移.放缩.旋转.错切.裁剪等操作. restore:用来恢复Canvas之前保存的状态. ...

  8. TFS Express backup and restore

    When we setup source control server, we should always make a backup and restore plan for it. This ar ...

  9. Restore Volume 操作 - 每天5分钟玩转 OpenStack(60)

    前面我们 backup 了 voluem,今天我们将讨论如何 restore volume. restore 的过程其实很简单,两步走: 在存储节点上创建一个空白 volume. 将 backup 的 ...

  10. Visual Studio 2015无法进行Package Restore的原因和解决方案

    这篇文章是记录在我的当前电脑上面,安装Visual Studio 2015 Community Edition出现的无法进行Package Restore的问题,很可能在你的电脑上面无法重现.我的环境 ...

随机推荐

  1. Pikachu漏洞靶场 XSS(跨站脚本攻击)

    XSS 关于xss的我也是一知半解,所以只放出payload来. 反射型xss(get) 修改maxlength属性之后提交如下内容: <script>alert(/xss/);</ ...

  2. Java 设置PDF文档过期时间(有效期)

    有些文档具有一定时效性,需在规定时间段内才可阅读查看,针对此类文档,需要设置文档的过期日期.时间等.下面以Java示例演示为例如何给PDF文档设置过期时间.需使用PDF类库, Free Spire.P ...

  3. 总是记不住java的IO流用法?用N个问题教你掌握java IO流

    摘要:Java IO 体系看起来类很多,感觉很复杂,但其实是 IO 涉及的因素太多了.在设计 IO 相关的类时,编写者也不是从同一个方面考虑的,所以会给人一种很乱的感觉,并且还有设计模式的使用,更加难 ...

  4. 再谈BOM和DOM(6):dom对象及event对象位值计算—如offsetX/Top,clentX

    总是会被javascript的event对象的clientX,offsetX,screenX,pageX 弄得头晕,于是决定做个图来区分一下(画得我手那个酸呀....) event对象位置信息获取 先 ...

  5. Solon 小技巧收集 - 页面跳转(重定向)

    @XMapping("/") public void jump(XContext ctx){ ctx.redirect("http://www.noear.org&quo ...

  6. Jenkins Blue Ocean

    介绍 Blue Ocean 是 pipeline 的可视化UI.同时兼容经典的自由模式的 job.Jenkins Pipeline 从头开始设计,但仍与自由式作业兼容,Blue Ocean 减少了经典 ...

  7. 熔断、限流、降级 —— SpringCloud Alibaba Sentinel

    Sentinel 简介 Sentinel 是阿里中间件团队开源的,面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流.流量整形.熔断降级.系统负载保护.热点防护等多个维度来帮助开发者保 ...

  8. 方法记录 | 文件批量导入Goodnotes

    一般来说通常资料都是用网盘下载了很多文件,想用Goodnotes来写批注,记笔记等,但是由于网盘不能直接分享.也不能批量分享到Goodnotes,给学习带来了很大的麻烦. 当然有钱的大佬们呢直接开了 ...

  9. 汇编 | mov. add. sub指令

    Description 前面我们用到了mov, add. sub指令,它们都带有两个操作对象.到现在,我们知道,mov指令可以有以下几种形式. mov 寄存器,数据 比如: mov ax,8 mov ...

  10. 【题解】Qin Shi Huang's National Road System HDU - 4081 ⭐⭐⭐⭐ 【次小生成树】

    During the Warring States Period of ancient China(476 BC to 221 BC), there were seven kingdoms in Ch ...