From d1c03e7d8db142ac2bfdf2418cb44674f3581f15 Mon Sep 17 00:00:00 2001 From: Hillium Date: Tue, 19 May 2020 12:05:19 +0800 Subject: [PATCH 01/16] br: add online restore, raw kv. --- br/backup-and-restore-tool.md | 126 ++++++++++++++++++++++++++++++---- 1 file changed, 112 insertions(+), 14 deletions(-) diff --git a/br/backup-and-restore-tool.md b/br/backup-and-restore-tool.md index 75596c401d57..e5194079e312 100644 --- a/br/backup-and-restore-tool.md +++ b/br/backup-and-restore-tool.md @@ -164,6 +164,12 @@ mysql -h${TiDBIP} -P4000 -u${TIDB_USER} ${password_str} -Nse \ 用例:将所有集群数据备份到各个 TiKV 节点的 `/tmp/backup` 路径,同时也会将备份的元信息文件 `backupmeta` 写到该路径下。 +> **注意:** +> +> 我们的测试结果中,假如备份盘和服务盘不同,在线备份会让只读线上服务的 QPS 下降 15%~25% 左右。 +> 但是,假如备份盘和服务盘相同,备份将会和服务争夺 IO 资源,这可能会让只读线上服务的 QPS 骤降一半以上。 +> 因此,请尽量禁止在线服务的数据备份到 tikv 的数据盘。 + {{< copyable "shell-regular" >}} ```shell @@ -258,6 +264,62 @@ br backup full \ --log-file backuptable.log ``` +### 增量备份 + +如果想要增量备份,只需要在备份的时候指定 `--lastbackupts` 即可。 + +注意增量备份有两个限制: + +- 增量备份需要与前一次全量备份在不同的路径下 +- 增量备份开始时间与 `lastbackupts` 之间不能有 GC + +{{< copyable "shell-regular" >}} + +```shell +br backup full\ + --pd ${PDIP}:2379 \ + -s local:///home/tidb/backupdata/incr \ + --lastbackupts ${LAST_BACKUP_TS} +``` + +以上命令会备份 `[LAST_BACKUP_TS, current PD timestamp)` 之间的增量数据。 + +你可以使用 `validate` 指令获取上一次备份的时间戳,如下: + +{{< copyable "shell-regular" >}} + +```shell +LAST_BACKUP_TS=`br validate decode --field="end-version" -s local:///home/tidb/backupdata` +``` + +示例备份的增量数据包括 `[LAST_BACKUP_TS, current PD timestamp)` 之间的新写入数据,以及这段时间内的 DDL。在恢复的时候,我们会先把所有 DDL 恢复,而后才会恢复写入数据。 + +### Raw KV 备份(实验性功能) + +> **警告:** +> +> Raw KV 备份功能还在实验中,它没有经过完备的测试。暂时请避免在生产环境中使用它。 + +TiKV 已经成为了云原生基金会的独立项目。考虑到这点,BR 也提供跳过 TiDB 层,直接备份 TiKV 中数据的功能: + +{{< copyable "shell-regular" >}} + +```shell +br backup raw --pd $PD_ADDR \ + -s "local://$BACKUP_DIR" \ + --start 31 \ + --end 3130303030303030 \ + --format hex \ + --cf default +``` + +以上命令会备份 default CF 上,`[0x31, 0x3130303030303030)` 之间的所有键到 `$BACKUP_DIR` 去。 +这里,`--start` 和 `--end` 的参数会先依照 `--format` 指定的方式解码,再被送到 TiKV 上去,目前支持以下解码方式: + +- "raw":不进行任何操作,将输入的字符串直接编码为二进制格式的键。 +- "hex":将输入的字符串视作十六进制数字。这是默认的编码方式。 +- "escape":对输入的字符串进行转义之后,再编码为二进制格式。 + ## 恢复集群数据 使用 `br restore` 命令来恢复备份数据。可选择添加 `full`、`db` 或 `table` 子命令来指定恢复操作的范围:全部集群数据、某个数据库或某张数据表。 @@ -358,36 +420,72 @@ br restore full \ --pd "${PDIP}:2379" \ --storage "s3://${Bucket}/${Folder}" \ --s3.region "${region}" \ - --send-credentials-to-tikv true \ + --send-credentials-to-tikv=true \ --log-file restorefull.log ``` 以上命令中 `--table` 选项指定了需要恢复的表名。其余选项的含义与[恢复某个数据库](#恢复某个数据库)相同。 -### 增量备份恢复 +### 增量恢复 -如果想要增量备份,只需要在备份的时候指定 `--lastbackupts` 即可。 +在增量恢复的时候,使用 BR 的方法和全量恢复并无差别。需要注意,恢复增量数据的时候,需要保证备份时指定的 `last backup ts` 之前备份的数据已经全部恢复到目标集群。 -注意增量备份有两个限制: +### Raw KV 恢复(实验性功能) -- 增量备份需要与前一次全量备份在不同的路径下 -- 增量备份开始时间与 `lastbackupts` 之间不能有 GC +> **警告:** +> +> Raw KV 恢复功能还在实验中,它没有经过完备的测试。暂时请避免在生产环境中使用它。 + +和 [Raw KV 备份](#raw-kv-备份实验性功能)相似地,恢复 Raw KV 的命令如下: {{< copyable "shell-regular" >}} ```shell - LAST_BACKUP_TS=`./br validate decode --field="end-version" -s local:///home/tidb/backupdata` - ./br backup full\ - --pd ${PDIP}:2379 \ - -s local:///home/tidb/backupdata/incr \ - --lastbackupts ${LAST_BACKUP_TS} +br restore raw --pd $PD_ADDR \ + -s "local://$BACKUP_DIR" \ + --start 31 \ + --end 3130303030303030 \ + --format hex \ + --cf default ``` -以上命令会备份 `[LAST_BACKUP_TS, current PD timestamp)` 之间的增量数据。你可以使用 `validate` 指令获取上一次备份的时间戳。 +以上命令会将备份的键中,范围在 `[0x31, 0x3130303030303030)` 中的键,恢复到 TiKV 集群中。这里键的编码方式和备份时相同。 -示例备份的增量数据包括 `[LAST_BACKUP_TS, current PD timestamp)` 之间的新写入数据,以及这段时间内的 DDL。在恢复的时候,我们会先把所有 DDL 恢复,而后才会恢复写入数据。 +### 在线恢复(实验性) -在增量恢复的时候,使用 BR 的方法和全量恢复并无差别。需要注意,恢复增量数据的时候,需要保证备份时指定的 `last backup ts` 之前备份的数据已经全部恢复到目标集群。 +> **警告:** +> +> 在线恢复功能还在实验中,它没有经过完备的测试,同时还依赖 PD 的不稳定特性 Placement rules。暂时请避免在生产环境中使用它。 + +在恢复的时候,写入过多的数据会影响在线集群的性能。为了尽量避免影响线上业务,BR 支持通过 [Placement rules](/docs-cn/dev/how-to/configure/placement-rules/) 隔离资源。让下载、导入 SST 的工作仅仅在由你指定的几个节点(下称“恢复节点”)上进行,具体操作如下: + +配置 PD,启动 Placement rules: + +{{< copyable "shell-regular" >}} + +```shell +echo "config set enable-placement-rules true" | pd-ctl +``` + +编辑恢复节点 TiKV 的配置文件,在 `server` 一项中指定: + +{{< copyable "" >}} + +``` +[server] +labels = { exclusive = "restore" } +``` + +启动恢复节点的 TiKV,使用 BR 恢复备份的文件,和非在线恢复相比,这里只需要加上 `--online` 标志即可: + +{{< copyable "shell-regular" >}} + +``` +br restore full \ + -s "local://$BACKUP_DIR" \ + --pd $PD_ADDR \ + --online +``` ## 最佳实践 From b458cac98c75d2bbead9c9137b2f83f110ed8689 Mon Sep 17 00:00:00 2001 From: Hillium Date: Tue, 19 May 2020 12:07:22 +0800 Subject: [PATCH 02/16] br: warp line of some commands. --- br/backup-and-restore-use-cases.md | 49 ++++++++++++++++++++++++++---- 1 file changed, 43 insertions(+), 6 deletions(-) diff --git a/br/backup-and-restore-use-cases.md b/br/backup-and-restore-use-cases.md index d053e61fa738..91cb18c0b9fa 100644 --- a/br/backup-and-restore-use-cases.md +++ b/br/backup-and-restore-use-cases.md @@ -83,7 +83,7 @@ BR 可以直接将命令下发到 TiKV 集群来执行备份和恢复,不依 {{< copyable "sql" >}} ```sql - update mysql.tidb set VARIABLE_VALUE = '10m' where VARIABLE_NAME = 'tikv_gc_life_time'; + UPDATE mysql.tidb SET VARIABLE_VALUE = '10m' WHERE VARIABLE_NAME = 'tikv_gc_life_time'; ``` ### 恢复前的准备工作 @@ -120,7 +120,12 @@ BR 可以直接将命令下发到 TiKV 集群来执行备份和恢复,不依 {{< copyable "shell-regular" >}} ```shell -bin/br backup table --db batchmark --table order_line -s local:///br_data --pd 172.16.5.198:2379 --log-file backup-nfs.log +bin/br backup table \ + --db batchmark \ + --table order_line \ + -s local:///br_data \ + --pd ${PD_ADDR}:2379 \ + --log-file backup-nfs.log ``` #### 备份过程中的运行指标 @@ -165,7 +170,17 @@ bin/br backup table --db batchmark --table order_line -s local:///br_data --pd 1 使用 BR 前已设置日志的存放路径。从路径下存放的日志中可以获取此次备份的相关统计信息。在日志中搜关键字 "summary",可以看到以下信息: ``` -["Table backup summary: total backup ranges: 4, total success: 4, total failed: 0, total take(s): 986.43, total kv: 5659888624, total size(MB): 353227.18, avg speed(MB/s): 358.09"] ["backup total regions"=7196] ["backup checksum"=6m28.291772955s] ["backup fast checksum"=24.950298ms] +["Table backup summary: + total backup ranges: 4, + total success: 4, + total failed: 0, + total take(s): 986.43, + total kv: 5659888624, + total size(MB): 353227.18, + avg speed(MB/s): 358.09"] + ["backup total regions"=7196] + ["backup checksum"=6m28.291772955s] + ["backup fast checksum"=24.950298ms] ``` 以上日志信息中包含以下内容: @@ -186,7 +201,13 @@ bin/br backup table --db batchmark --table order_line -s local:///br_data --pd 1 {{< copyable "shell-regular" >}} ```shell -bin/br backup table --db batchmark --table order_line -s local:///br_data/ --pd 172.16.5.198:2379 --log-file backup-nfs.log --concurrency 16 +bin/br backup table \ + --db batchmark \ + --table order_line \ + -s local:///br_data/ \ + --pd ${PD_ADDR}:2379 \ + --log-file backup-nfs.log \ + --concurrency 16 ``` ![img](/media/br/backup-diff.png) @@ -261,7 +282,18 @@ bin/br restore table --db batchmark --table order_line -s local:///br_data --pd 使用 BR 前已设置日志的存放路径。从路径下存放的日志中可以获取此次恢复的相关统计信息。在日志中搜关键字 "summary",可以看到以下信息: ``` -["Table Restore summary: total restore tables: 1, total success: 1, total failed: 0, total take(s): 961.37, total kv: 5659888624, total size(MB): 353227.18, avg speed(MB/s): 367.42"] ["restore files"=9263] ["restore ranges"=6888] ["split region"=49.049182743s] ["restore checksum"=6m34.879439498s] +["Table Restore summary: + total restore tables: 1, + total success: 1, + total failed: 0, + total take(s): 961.37, + total kv: 5659888624, + total size(MB): 353227.18, + avg speed(MB/s): 367.42"] + ["restore files"=9263] + ["restore ranges"=6888] + ["split region"=49.049182743s] + ["restore checksum"=6m34.879439498s] ``` 以上日志信息中包含以下内容: @@ -319,7 +351,12 @@ bin/br restore table --db batchmark --table order_line -s local:///br_data/ --pd {{< copyable "shell-regular" >}} ```shell -bin/br backup table --db batchmark --table order_line -s local:///home/tidb/backup_local/ --pd 172.16.5.198:2379 --log-file backup_local.log +bin/br backup table \ + --db batchmark \ + --table order_line \ + -s local:///home/tidb/backup_local/ \ + --pd ${PD_ADDR}:2379 \ + --log-file backup_local.log ``` 运行备份时,参考[备份过程中的运行指标](#备份过程中的运行指标)对相关指标进行监控,以了解备份状态。 From 59c73150ae7418573c62011343bb8b644c34d4c2 Mon Sep 17 00:00:00 2001 From: Hillium Date: Tue, 19 May 2020 12:24:09 +0800 Subject: [PATCH 03/16] br: fix a dead link. --- br/backup-and-restore-tool.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/br/backup-and-restore-tool.md b/br/backup-and-restore-tool.md index e5194079e312..4b9c8dc19179 100644 --- a/br/backup-and-restore-tool.md +++ b/br/backup-and-restore-tool.md @@ -457,7 +457,7 @@ br restore raw --pd $PD_ADDR \ > > 在线恢复功能还在实验中,它没有经过完备的测试,同时还依赖 PD 的不稳定特性 Placement rules。暂时请避免在生产环境中使用它。 -在恢复的时候,写入过多的数据会影响在线集群的性能。为了尽量避免影响线上业务,BR 支持通过 [Placement rules](/docs-cn/dev/how-to/configure/placement-rules/) 隔离资源。让下载、导入 SST 的工作仅仅在由你指定的几个节点(下称“恢复节点”)上进行,具体操作如下: +在恢复的时候,写入过多的数据会影响在线集群的性能。为了尽量避免影响线上业务,BR 支持通过 [Placement rules](/configure-placement-rules.md) 隔离资源。让下载、导入 SST 的工作仅仅在由你指定的几个节点(下称“恢复节点”)上进行,具体操作如下: 配置 PD,启动 Placement rules: From 606c21dd2d4f1550838ed415ccd73f3deaa7f8dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=B1=E5=B2=9A?= <36239017+YuJuncen@users.noreply.github.com> Date: Wed, 20 May 2020 10:41:16 +0800 Subject: [PATCH 04/16] Update br/backup-and-restore-tool.md Co-authored-by: kissmydb --- br/backup-and-restore-tool.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/br/backup-and-restore-tool.md b/br/backup-and-restore-tool.md index 4b9c8dc19179..1d6195c483f6 100644 --- a/br/backup-and-restore-tool.md +++ b/br/backup-and-restore-tool.md @@ -266,7 +266,7 @@ br backup full \ ### 增量备份 -如果想要增量备份,只需要在备份的时候指定 `--lastbackupts` 即可。 +如果想要增量备份,只需要在备份的时候指定【上一次的备份时间戳】 `--lastbackupts` 即可。 注意增量备份有两个限制: From 73c9d730a9129b7f877d8ba48d884bd6938c630a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=B1=E5=B2=9A?= <36239017+YuJuncen@users.noreply.github.com> Date: Thu, 21 May 2020 12:24:40 +0800 Subject: [PATCH 05/16] Apply suggestions from code review Co-authored-by: TomShawn <41534398+TomShawn@users.noreply.github.com> Co-authored-by: WangXiangUSTC --- br/backup-and-restore-tool.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/br/backup-and-restore-tool.md b/br/backup-and-restore-tool.md index 1d6195c483f6..19c8f8231a4e 100644 --- a/br/backup-and-restore-tool.md +++ b/br/backup-and-restore-tool.md @@ -166,8 +166,8 @@ mysql -h${TiDBIP} -P4000 -u${TIDB_USER} ${password_str} -Nse \ > **注意:** > -> 我们的测试结果中,假如备份盘和服务盘不同,在线备份会让只读线上服务的 QPS 下降 15%~25% 左右。 -> 但是,假如备份盘和服务盘相同,备份将会和服务争夺 IO 资源,这可能会让只读线上服务的 QPS 骤降一半以上。 +> 经测试,假如备份盘和服务盘不同,在线备份会让只读线上服务的 QPS 下降 15%~25% 左右。 +> 假如备份盘和服务盘相同,备份将会和服务争夺 I/O 资源,这可能会让只读线上服务的 QPS 骤降一半以上。 > 因此,请尽量禁止在线服务的数据备份到 tikv 的数据盘。 {{< copyable "shell-regular" >}} @@ -266,9 +266,9 @@ br backup full \ ### 增量备份 -如果想要增量备份,只需要在备份的时候指定【上一次的备份时间戳】 `--lastbackupts` 即可。 +如果想要备份增量,只需要在备份的时候指定**上一次的备份时间戳** `--lastbackupts` 即可。 -注意增量备份有两个限制: +注意增量备份有以下限制: - 增量备份需要与前一次全量备份在不同的路径下 - 增量备份开始时间与 `lastbackupts` 之间不能有 GC @@ -284,7 +284,7 @@ br backup full\ 以上命令会备份 `[LAST_BACKUP_TS, current PD timestamp)` 之间的增量数据。 -你可以使用 `validate` 指令获取上一次备份的时间戳,如下: +你可以使用 `validate` 指令获取上一次备份的时间戳,示例如下: {{< copyable "shell-regular" >}} @@ -292,7 +292,7 @@ br backup full\ LAST_BACKUP_TS=`br validate decode --field="end-version" -s local:///home/tidb/backupdata` ``` -示例备份的增量数据包括 `[LAST_BACKUP_TS, current PD timestamp)` 之间的新写入数据,以及这段时间内的 DDL。在恢复的时候,我们会先把所有 DDL 恢复,而后才会恢复写入数据。 +示例备份的增量数据包括 `[LAST_BACKUP_TS, current PD timestamp)` 之间的新写入数据,以及这段时间内的 DDL。在恢复的时候,BR 会先把所有 DDL 恢复,而后才会恢复写入数据。 ### Raw KV 备份(实验性功能) @@ -313,7 +313,7 @@ br backup raw --pd $PD_ADDR \ --cf default ``` -以上命令会备份 default CF 上,`[0x31, 0x3130303030303030)` 之间的所有键到 `$BACKUP_DIR` 去。 +以上命令会备份 default CF 上 `[0x31, 0x3130303030303030)` 之间的所有键到 `$BACKUP_DIR` 去。 这里,`--start` 和 `--end` 的参数会先依照 `--format` 指定的方式解码,再被送到 TiKV 上去,目前支持以下解码方式: - "raw":不进行任何操作,将输入的字符串直接编码为二进制格式的键。 @@ -428,7 +428,7 @@ br restore full \ ### 增量恢复 -在增量恢复的时候,使用 BR 的方法和全量恢复并无差别。需要注意,恢复增量数据的时候,需要保证备份时指定的 `last backup ts` 之前备份的数据已经全部恢复到目标集群。 +增量恢复的方法和使用 BR 进行全量恢复的方法并无差别。需要注意,恢复增量数据的时候,需要保证备份时指定的 `last backup ts` 之前备份的数据已经全部恢复到目标集群。 ### Raw KV 恢复(实验性功能) @@ -457,7 +457,7 @@ br restore raw --pd $PD_ADDR \ > > 在线恢复功能还在实验中,它没有经过完备的测试,同时还依赖 PD 的不稳定特性 Placement rules。暂时请避免在生产环境中使用它。 -在恢复的时候,写入过多的数据会影响在线集群的性能。为了尽量避免影响线上业务,BR 支持通过 [Placement rules](/configure-placement-rules.md) 隔离资源。让下载、导入 SST 的工作仅仅在由你指定的几个节点(下称“恢复节点”)上进行,具体操作如下: +在恢复的时候,写入过多的数据会影响在线集群的性能。为了尽量避免影响线上业务,BR 支持通过 [Placement rules](/configure-placement-rules.md) 隔离资源。让下载、导入 SST 的工作仅仅在指定的几个节点(下称“恢复节点”)上进行,具体操作如下: 配置 PD,启动 Placement rules: From bdc93d0b4859c0fdd48c97f07aa863494515bb99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=B1=E5=B2=9A?= <36239017+YuJuncen@users.noreply.github.com> Date: Thu, 21 May 2020 12:29:10 +0800 Subject: [PATCH 06/16] Update backup-and-restore-tool.md --- br/backup-and-restore-tool.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/br/backup-and-restore-tool.md b/br/backup-and-restore-tool.md index 19c8f8231a4e..999f60640468 100644 --- a/br/backup-and-restore-tool.md +++ b/br/backup-and-restore-tool.md @@ -168,7 +168,7 @@ mysql -h${TiDBIP} -P4000 -u${TIDB_USER} ${password_str} -Nse \ > > 经测试,假如备份盘和服务盘不同,在线备份会让只读线上服务的 QPS 下降 15%~25% 左右。 > 假如备份盘和服务盘相同,备份将会和服务争夺 I/O 资源,这可能会让只读线上服务的 QPS 骤降一半以上。 -> 因此,请尽量禁止在线服务的数据备份到 tikv 的数据盘。 +> 因此,请尽量禁止在线服务的数据备份到 TiKV 的数据盘,并且按照需要使用 `--ratelimit` 选项限制备份速度。 {{< copyable "shell-regular" >}} @@ -300,7 +300,7 @@ LAST_BACKUP_TS=`br validate decode --field="end-version" -s local:///home/tidb/b > > Raw KV 备份功能还在实验中,它没有经过完备的测试。暂时请避免在生产环境中使用它。 -TiKV 已经成为了云原生基金会的独立项目。考虑到这点,BR 也提供跳过 TiDB 层,直接备份 TiKV 中数据的功能: +在某些使用场景下,TiKV 可能会独立于 TiDB 运行。考虑到这点,BR 也提供跳过 TiDB 层,直接备份 TiKV 中数据的功能: {{< copyable "shell-regular" >}} @@ -451,7 +451,7 @@ br restore raw --pd $PD_ADDR \ 以上命令会将备份的键中,范围在 `[0x31, 0x3130303030303030)` 中的键,恢复到 TiKV 集群中。这里键的编码方式和备份时相同。 -### 在线恢复(实验性) +### 在线恢复(实验性功能) > **警告:** > From a9caf7037a5844d8277a52e5531b837482593422 Mon Sep 17 00:00:00 2001 From: TomShawn <41534398+TomShawn@users.noreply.github.com> Date: Thu, 21 May 2020 14:05:11 +0800 Subject: [PATCH 07/16] refine format --- br/backup-and-restore-tool.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/br/backup-and-restore-tool.md b/br/backup-and-restore-tool.md index 999f60640468..475b9ddc5ae6 100644 --- a/br/backup-and-restore-tool.md +++ b/br/backup-and-restore-tool.md @@ -166,9 +166,9 @@ mysql -h${TiDBIP} -P4000 -u${TIDB_USER} ${password_str} -Nse \ > **注意:** > -> 经测试,假如备份盘和服务盘不同,在线备份会让只读线上服务的 QPS 下降 15%~25% 左右。 -> 假如备份盘和服务盘相同,备份将会和服务争夺 I/O 资源,这可能会让只读线上服务的 QPS 骤降一半以上。 -> 因此,请尽量禁止在线服务的数据备份到 TiKV 的数据盘,并且按照需要使用 `--ratelimit` 选项限制备份速度。 +> + 经测试,假如备份盘和服务盘不同,在线备份会让只读线上服务的 QPS 下降 15%~25% 左右。 +> + 假如备份盘和服务盘相同,备份将会和服务争夺 I/O 资源,这可能会让只读线上服务的 QPS 骤降一半以上。 +> + 因此,请尽量禁止将在线服务的数据备份到 TiKV 的数据盘,并且按照需要使用 `--ratelimit` 选项限制备份速度。 {{< copyable "shell-regular" >}} @@ -298,7 +298,7 @@ LAST_BACKUP_TS=`br validate decode --field="end-version" -s local:///home/tidb/b > **警告:** > -> Raw KV 备份功能还在实验中,它没有经过完备的测试。暂时请避免在生产环境中使用它。 +> Raw KV 备份功能还在实验中,没有经过完备的测试。暂时请避免在生产环境中使用该功能。 在某些使用场景下,TiKV 可能会独立于 TiDB 运行。考虑到这点,BR 也提供跳过 TiDB 层,直接备份 TiKV 中数据的功能: @@ -314,6 +314,7 @@ br backup raw --pd $PD_ADDR \ ``` 以上命令会备份 default CF 上 `[0x31, 0x3130303030303030)` 之间的所有键到 `$BACKUP_DIR` 去。 + 这里,`--start` 和 `--end` 的参数会先依照 `--format` 指定的方式解码,再被送到 TiKV 上去,目前支持以下解码方式: - "raw":不进行任何操作,将输入的字符串直接编码为二进制格式的键。 @@ -434,7 +435,7 @@ br restore full \ > **警告:** > -> Raw KV 恢复功能还在实验中,它没有经过完备的测试。暂时请避免在生产环境中使用它。 +> Raw KV 恢复功能还在实验中,没有经过完备的测试。暂时请避免在生产环境中使用该功能。 和 [Raw KV 备份](#raw-kv-备份实验性功能)相似地,恢复 Raw KV 的命令如下: @@ -455,7 +456,7 @@ br restore raw --pd $PD_ADDR \ > **警告:** > -> 在线恢复功能还在实验中,它没有经过完备的测试,同时还依赖 PD 的不稳定特性 Placement rules。暂时请避免在生产环境中使用它。 +> 在线恢复功能还在实验中,没有经过完备的测试,同时还依赖 PD 的不稳定特性 Placement Rules。暂时请避免在生产环境中使用该功能。 在恢复的时候,写入过多的数据会影响在线集群的性能。为了尽量避免影响线上业务,BR 支持通过 [Placement rules](/configure-placement-rules.md) 隔离资源。让下载、导入 SST 的工作仅仅在指定的几个节点(下称“恢复节点”)上进行,具体操作如下: From cd0482fa2728aecd9bd9930623c2db92dec5c5da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=B1=E5=B2=9A?= <36239017+YuJuncen@users.noreply.github.com> Date: Fri, 22 May 2020 16:29:10 +0800 Subject: [PATCH 08/16] br: fix incremental backup time range. --- br/backup-and-restore-tool.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/br/backup-and-restore-tool.md b/br/backup-and-restore-tool.md index 475b9ddc5ae6..24d67a7d6490 100644 --- a/br/backup-and-restore-tool.md +++ b/br/backup-and-restore-tool.md @@ -282,7 +282,7 @@ br backup full\ --lastbackupts ${LAST_BACKUP_TS} ``` -以上命令会备份 `[LAST_BACKUP_TS, current PD timestamp)` 之间的增量数据。 +以上命令会备份 `(LAST_BACKUP_TS, current PD timestamp]` 之间的增量数据。 你可以使用 `validate` 指令获取上一次备份的时间戳,示例如下: @@ -292,7 +292,7 @@ br backup full\ LAST_BACKUP_TS=`br validate decode --field="end-version" -s local:///home/tidb/backupdata` ``` -示例备份的增量数据包括 `[LAST_BACKUP_TS, current PD timestamp)` 之间的新写入数据,以及这段时间内的 DDL。在恢复的时候,BR 会先把所有 DDL 恢复,而后才会恢复写入数据。 +示例备份的增量数据包括 `(LAST_BACKUP_TS, current PD timestamp]` 之间的新写入数据,以及这段时间内的 DDL。在恢复的时候,BR 会先把所有 DDL 恢复,而后才会恢复写入数据。 ### Raw KV 备份(实验性功能) From 0075375c1b84278dc8988864656594d57d92812b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=B1=E5=B2=9A?= <36239017+YuJuncen@users.noreply.github.com> Date: Mon, 25 May 2020 11:27:10 +0800 Subject: [PATCH 09/16] br: add a hint of where the backup stores --- br/backup-and-restore-tool.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/br/backup-and-restore-tool.md b/br/backup-and-restore-tool.md index 24d67a7d6490..b5c79690148d 100644 --- a/br/backup-and-restore-tool.md +++ b/br/backup-and-restore-tool.md @@ -116,7 +116,7 @@ TiKV 收到加载 SST 文件的请求后,利用 Raft 机制保证加载 SST * `backup`:`br` 的子命令 * `full`:`backup` 的子命令 * `-s` 或 `--storage`:备份保存的路径 -* `"local:///tmp/backup"`:`-s` 的参数,保存的路径为本地磁盘的 `/tmp/backup` +* `"local:///tmp/backup"`:`-s` 的参数,保存的路径为各个存储节点(即 TiKV 节点)本地磁盘的 `/tmp/backup` * `--pd`:PD 服务地址 * `"${PDIP}:2379"`:`--pd` 的参数 From eef24fe439776616ed7e16cbcfd9ba2afb996731 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=B1=E5=B2=9A?= <36239017+YuJuncen@users.noreply.github.com> Date: Mon, 25 May 2020 11:53:33 +0800 Subject: [PATCH 10/16] br: add a hint of local storage --- br/backup-and-restore-tool.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/br/backup-and-restore-tool.md b/br/backup-and-restore-tool.md index b5c79690148d..32940b17f665 100644 --- a/br/backup-and-restore-tool.md +++ b/br/backup-and-restore-tool.md @@ -116,10 +116,16 @@ TiKV 收到加载 SST 文件的请求后,利用 Raft 机制保证加载 SST * `backup`:`br` 的子命令 * `full`:`backup` 的子命令 * `-s` 或 `--storage`:备份保存的路径 -* `"local:///tmp/backup"`:`-s` 的参数,保存的路径为各个存储节点(即 TiKV 节点)本地磁盘的 `/tmp/backup` +* `"local:///tmp/backup"`:`-s` 的参数,保存的路径为各个节点本地磁盘的 `/tmp/backup` * `--pd`:PD 服务地址 * `"${PDIP}:2379"`:`--pd` 的参数 +> **提示:** +> +> 上文提到“各个节点”,指的是 TiKV 节点 + BR 节点。在使用 `local` storage 的时候,备份数据会分散在各个节点的本地文件系统中。 +> +> 在日后恢复的时候,必须手动聚集这些数据才能完成恢复工作(见[恢复集群数据](#恢复集群数据))。因此更加建议在各个节点挂载 NFS 网盘,或者直接备份到 `S3` 对象存储中。 + ### 命令和子命令 BR 由多层命令组成。目前,BR 包含 `backup`、`restore` 和 `version` 三个子命令: From 10b52015953d698c71b3bc47770b52e7f25e9241 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=B1=E5=B2=9A?= <36239017+YuJuncen@users.noreply.github.com> Date: Mon, 25 May 2020 15:06:35 +0800 Subject: [PATCH 11/16] Update backup-and-restore-tool.md --- br/backup-and-restore-tool.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/br/backup-and-restore-tool.md b/br/backup-and-restore-tool.md index 32940b17f665..8018980842a4 100644 --- a/br/backup-and-restore-tool.md +++ b/br/backup-and-restore-tool.md @@ -172,9 +172,8 @@ mysql -h${TiDBIP} -P4000 -u${TIDB_USER} ${password_str} -Nse \ > **注意:** > -> + 经测试,假如备份盘和服务盘不同,在线备份会让只读线上服务的 QPS 下降 15%~25% 左右。 -> + 假如备份盘和服务盘相同,备份将会和服务争夺 I/O 资源,这可能会让只读线上服务的 QPS 骤降一半以上。 -> + 因此,请尽量禁止将在线服务的数据备份到 TiKV 的数据盘,并且按照需要使用 `--ratelimit` 选项限制备份速度。 +> + 经测试,在全速备份的情况下,如果备份盘和服务盘不同,在线备份会让只读线上服务的 QPS 下降 15%~25% 左右。如果希望降低影响,请参考 `--ratelimit` 进行限速。 +> + 假如备份盘和服务盘相同,备份将会和服务争夺 I/O 资源,这可能会让只读线上服务的 QPS 骤降一半以上。请尽量禁止将在线服务的数据备份到 TiKV 的数据盘。 {{< copyable "shell-regular" >}} From 44e475c9508ea0f527237aa845250d59e9490933 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=B1=E5=B2=9A?= <36239017+YuJuncen@users.noreply.github.com> Date: Tue, 26 May 2020 13:56:52 +0800 Subject: [PATCH 12/16] Update br/backup-and-restore-tool.md Co-authored-by: Neil Shen --- br/backup-and-restore-tool.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/br/backup-and-restore-tool.md b/br/backup-and-restore-tool.md index 8018980842a4..f1e129aecdce 100644 --- a/br/backup-and-restore-tool.md +++ b/br/backup-and-restore-tool.md @@ -116,7 +116,7 @@ TiKV 收到加载 SST 文件的请求后,利用 Raft 机制保证加载 SST * `backup`:`br` 的子命令 * `full`:`backup` 的子命令 * `-s` 或 `--storage`:备份保存的路径 -* `"local:///tmp/backup"`:`-s` 的参数,保存的路径为各个节点本地磁盘的 `/tmp/backup` +* `"local:///tmp/backup"`:`-s` 的参数,保存的路径为各个 TiKV 节点本地磁盘的 `/tmp/backup` * `--pd`:PD 服务地址 * `"${PDIP}:2379"`:`--pd` 的参数 From bd37f38b044365eb6c6f177b88de41bd4f342a7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=B1=E5=B2=9A?= <36239017+YuJuncen@users.noreply.github.com> Date: Tue, 26 May 2020 14:00:52 +0800 Subject: [PATCH 13/16] Update backup-and-restore-tool.md --- br/backup-and-restore-tool.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/br/backup-and-restore-tool.md b/br/backup-and-restore-tool.md index f1e129aecdce..dd0b58b8f6e8 100644 --- a/br/backup-and-restore-tool.md +++ b/br/backup-and-restore-tool.md @@ -122,9 +122,12 @@ TiKV 收到加载 SST 文件的请求后,利用 Raft 机制保证加载 SST > **提示:** > -> 上文提到“各个节点”,指的是 TiKV 节点 + BR 节点。在使用 `local` storage 的时候,备份数据会分散在各个节点的本地文件系统中。 +> 在使用 `local` storage 的时候,备份数据会分散在各个节点的本地文件系统中。 > -> 在日后恢复的时候,必须手动聚集这些数据才能完成恢复工作(见[恢复集群数据](#恢复集群数据))。因此更加建议在各个节点挂载 NFS 网盘,或者直接备份到 `S3` 对象存储中。 +> **不建议**在生产环境中备份到本地磁盘,因为在日后恢复的时候,**必须**手动聚集这些数据才能完成恢复工作(见[恢复集群数据](#恢复集群数据))。 +> 聚集这些备份数据可能会造成数据冗余和运维上的麻烦,而且在不聚集这些数据便直接恢复的时候会遇到颇为迷惑的 `SST file not found` 报错。 +> +> 更加建议在各个节点挂载 NFS 网盘,或者直接备份到 `S3` 对象存储中。 ### 命令和子命令 From 5e2548a75b32ee6e8790fd06134059405c9dd8db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=B1=E5=B2=9A?= <36239017+YuJuncen@users.noreply.github.com> Date: Tue, 26 May 2020 14:11:28 +0800 Subject: [PATCH 14/16] Update br/backup-and-restore-tool.md Co-authored-by: TomShawn <41534398+TomShawn@users.noreply.github.com> --- br/backup-and-restore-tool.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/br/backup-and-restore-tool.md b/br/backup-and-restore-tool.md index dd0b58b8f6e8..da54fa178636 100644 --- a/br/backup-and-restore-tool.md +++ b/br/backup-and-restore-tool.md @@ -120,7 +120,7 @@ TiKV 收到加载 SST 文件的请求后,利用 Raft 机制保证加载 SST * `--pd`:PD 服务地址 * `"${PDIP}:2379"`:`--pd` 的参数 -> **提示:** +> **注意:** > > 在使用 `local` storage 的时候,备份数据会分散在各个节点的本地文件系统中。 > From 5291d578fee14ee6fe20236539d3652c196be68b Mon Sep 17 00:00:00 2001 From: TomShawn <41534398+TomShawn@users.noreply.github.com> Date: Tue, 26 May 2020 14:17:32 +0800 Subject: [PATCH 15/16] Update backup-and-restore-tool.md --- br/backup-and-restore-tool.md | 38 +++++++++++++++++------------------ 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/br/backup-and-restore-tool.md b/br/backup-and-restore-tool.md index da54fa178636..e8fbe5b349bf 100644 --- a/br/backup-and-restore-tool.md +++ b/br/backup-and-restore-tool.md @@ -468,33 +468,33 @@ br restore raw --pd $PD_ADDR \ 在恢复的时候,写入过多的数据会影响在线集群的性能。为了尽量避免影响线上业务,BR 支持通过 [Placement rules](/configure-placement-rules.md) 隔离资源。让下载、导入 SST 的工作仅仅在指定的几个节点(下称“恢复节点”)上进行,具体操作如下: -配置 PD,启动 Placement rules: +1. 配置 PD,启动 Placement rules: -{{< copyable "shell-regular" >}} + {{< copyable "shell-regular" >}} -```shell -echo "config set enable-placement-rules true" | pd-ctl -``` + ```shell + echo "config set enable-placement-rules true" | pd-ctl + ``` -编辑恢复节点 TiKV 的配置文件,在 `server` 一项中指定: +2. 编辑恢复节点 TiKV 的配置文件,在 `server` 一项中指定: -{{< copyable "" >}} + {{< copyable "" >}} -``` -[server] -labels = { exclusive = "restore" } -``` + ``` + [server] + labels = { exclusive = "restore" } + ``` -启动恢复节点的 TiKV,使用 BR 恢复备份的文件,和非在线恢复相比,这里只需要加上 `--online` 标志即可: +3. 启动恢复节点的 TiKV,使用 BR 恢复备份的文件,和非在线恢复相比,这里只需要加上 `--online` 标志即可: -{{< copyable "shell-regular" >}} + {{< copyable "shell-regular" >}} -``` -br restore full \ - -s "local://$BACKUP_DIR" \ - --pd $PD_ADDR \ - --online -``` + ``` + br restore full \ + -s "local://$BACKUP_DIR" \ + --pd $PD_ADDR \ + --online + ``` ## 最佳实践 From 1ea92b67f2a2b2bc5260c6abd7a03602a571c232 Mon Sep 17 00:00:00 2001 From: TomShawn <41534398+TomShawn@users.noreply.github.com> Date: Tue, 26 May 2020 14:17:58 +0800 Subject: [PATCH 16/16] Update br/backup-and-restore-tool.md --- br/backup-and-restore-tool.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/br/backup-and-restore-tool.md b/br/backup-and-restore-tool.md index e8fbe5b349bf..b9f5abd2292c 100644 --- a/br/backup-and-restore-tool.md +++ b/br/backup-and-restore-tool.md @@ -458,7 +458,7 @@ br restore raw --pd $PD_ADDR \ --cf default ``` -以上命令会将备份的键中,范围在 `[0x31, 0x3130303030303030)` 中的键,恢复到 TiKV 集群中。这里键的编码方式和备份时相同。 +以上命令会将范围在 `[0x31, 0x3130303030303030)` 的已备份键恢复到 TiKV 集群中。这里键的编码方式和备份时相同。 ### 在线恢复(实验性功能)