From ea69697e115fcc67d8278266d54c8919206f4aaf Mon Sep 17 00:00:00 2001 From: hillium Date: Fri, 30 Apr 2021 11:26:24 +0800 Subject: [PATCH 01/11] br: add restore to systables --- br/use-br-command-line-tool.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/br/use-br-command-line-tool.md b/br/use-br-command-line-tool.md index 230f197c6ff5..6c6089f87d6d 100644 --- a/br/use-br-command-line-tool.md +++ b/br/use-br-command-line-tool.md @@ -377,6 +377,32 @@ br restore full \ 增量恢复的方法和使用 BR 进行全量恢复的方法并无差别。需要注意,恢复增量数据的时候,需要保证备份时指定的 `last backup ts` 之前备份的数据已经全部恢复到目标集群。 +### 恢复创建在 `mysql` 数据库下的表 + +在 [#1048](https://github.com/pingcap/br/pull/1048) 之后,BR 可以并且默认会备份 `mysql` 数据库下的表。 + +在恢复时,`mysql` 下的表默认会被 [table filter](/docs-cn/dev/table-filter/) 规则过滤掉, +要恢复在 `mysql` 下的用户表的时候,可以通过 `-f` 来指定目标,例如,以下命令会恢复 `mysql.usertable`。 + +{{< copyable "shell-regular" >}} + +```shell +br restore full -f '*.*' -f '!mysql.*' -f 'mysql.usertable' -s $external_storage_url +# ^ ^ ^ +# | | +- select `mysql`.`usertable` +# | +- filter out other tables in `mysql` +# +- select all tables +``` + +> **警告:** +> +> 即便系统表(例如,`mysql.tidb` 等)也可以通过这个功能备份和恢复,但是部分系统表在恢复之后可能会出现意外状况,已知的异常如下: +> +> - 统计信息表(`mysql.stat_*`)无法被恢复。 +> - 用户信息表(`mysql.user`)在恢复之后不会生效,直到用户手动执行 `FLUSH PRIVILEGES`。 +> +> 对更多系统表恢复的兼容性测试也尚在进行中,为了防止意外,请尽量避免在生产环境中恢复系统表。 + ### Raw KV 恢复(实验性功能) > **警告:** From 3ec50a41df72318b3cc47e467e321931735e3f97 Mon Sep 17 00:00:00 2001 From: hillium Date: Fri, 30 Apr 2021 11:33:11 +0800 Subject: [PATCH 02/11] br: try to fix a link --- br/use-br-command-line-tool.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/br/use-br-command-line-tool.md b/br/use-br-command-line-tool.md index 6c6089f87d6d..8bda0c314aa2 100644 --- a/br/use-br-command-line-tool.md +++ b/br/use-br-command-line-tool.md @@ -381,7 +381,7 @@ br restore full \ 在 [#1048](https://github.com/pingcap/br/pull/1048) 之后,BR 可以并且默认会备份 `mysql` 数据库下的表。 -在恢复时,`mysql` 下的表默认会被 [table filter](/docs-cn/dev/table-filter/) 规则过滤掉, +在恢复时,`mysql` 下的表默认会被 [table filter](/table-filter) 规则过滤掉, 要恢复在 `mysql` 下的用户表的时候,可以通过 `-f` 来指定目标,例如,以下命令会恢复 `mysql.usertable`。 {{< copyable "shell-regular" >}} From 3716fe502bdd0b6eff4a8cfa2bbe178d3228e80c Mon Sep 17 00:00:00 2001 From: hillium Date: Fri, 30 Apr 2021 11:39:44 +0800 Subject: [PATCH 03/11] *: fix lint --- br/use-br-command-line-tool.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/br/use-br-command-line-tool.md b/br/use-br-command-line-tool.md index 8bda0c314aa2..f657e3aa350a 100644 --- a/br/use-br-command-line-tool.md +++ b/br/use-br-command-line-tool.md @@ -381,7 +381,7 @@ br restore full \ 在 [#1048](https://github.com/pingcap/br/pull/1048) 之后,BR 可以并且默认会备份 `mysql` 数据库下的表。 -在恢复时,`mysql` 下的表默认会被 [table filter](/table-filter) 规则过滤掉, +在恢复时,`mysql` 下的表默认会被 [table filter](/table-filter#表库过滤语法) 规则过滤掉, 要恢复在 `mysql` 下的用户表的时候,可以通过 `-f` 来指定目标,例如,以下命令会恢复 `mysql.usertable`。 {{< copyable "shell-regular" >}} From 235d7fc9418fda370c20ea674414fd81a9807c6a Mon Sep 17 00:00:00 2001 From: hillium Date: Fri, 30 Apr 2021 11:48:02 +0800 Subject: [PATCH 04/11] =?UTF-8?q?lint:=20=F0=9F=A4=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- br/use-br-command-line-tool.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/br/use-br-command-line-tool.md b/br/use-br-command-line-tool.md index f657e3aa350a..1d42338d61c5 100644 --- a/br/use-br-command-line-tool.md +++ b/br/use-br-command-line-tool.md @@ -381,7 +381,7 @@ br restore full \ 在 [#1048](https://github.com/pingcap/br/pull/1048) 之后,BR 可以并且默认会备份 `mysql` 数据库下的表。 -在恢复时,`mysql` 下的表默认会被 [table filter](/table-filter#表库过滤语法) 规则过滤掉, +在恢复时,`mysql` 下的表默认会被 [table filter](/table-filter.md#表库过滤语法) 规则过滤掉, 要恢复在 `mysql` 下的用户表的时候,可以通过 `-f` 来指定目标,例如,以下命令会恢复 `mysql.usertable`。 {{< copyable "shell-regular" >}} From 5b6cafdc6733dec5c41455cc17d7b38cda298446 Mon Sep 17 00:00:00 2001 From: hillium Date: Fri, 30 Apr 2021 11:52:05 +0800 Subject: [PATCH 05/11] lint: remove manual wrapline --- br/use-br-command-line-tool.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/br/use-br-command-line-tool.md b/br/use-br-command-line-tool.md index 1d42338d61c5..9fa808fdb12b 100644 --- a/br/use-br-command-line-tool.md +++ b/br/use-br-command-line-tool.md @@ -381,8 +381,7 @@ br restore full \ 在 [#1048](https://github.com/pingcap/br/pull/1048) 之后,BR 可以并且默认会备份 `mysql` 数据库下的表。 -在恢复时,`mysql` 下的表默认会被 [table filter](/table-filter.md#表库过滤语法) 规则过滤掉, -要恢复在 `mysql` 下的用户表的时候,可以通过 `-f` 来指定目标,例如,以下命令会恢复 `mysql.usertable`。 +在恢复时,`mysql` 下的表默认会被 [table filter](/table-filter.md#表库过滤语法) 规则过滤掉,要恢复在 `mysql` 下的用户表的时候,可以通过 `-f` 来指定目标,例如,以下命令会恢复 `mysql.usertable`。 {{< copyable "shell-regular" >}} From 7a9b9d52fa9f79f03b4f4ae86527c6a748440de4 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, 30 Apr 2021 17:43:23 +0800 Subject: [PATCH 06/11] Update use-br-command-line-tool.md --- br/use-br-command-line-tool.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/br/use-br-command-line-tool.md b/br/use-br-command-line-tool.md index 9fa808fdb12b..7bfa5c7c78d2 100644 --- a/br/use-br-command-line-tool.md +++ b/br/use-br-command-line-tool.md @@ -388,9 +388,9 @@ br restore full \ ```shell br restore full -f '*.*' -f '!mysql.*' -f 'mysql.usertable' -s $external_storage_url # ^ ^ ^ -# | | +- select `mysql`.`usertable` -# | +- filter out other tables in `mysql` -# +- select all tables +# | | +- ……仅恢复 `mysql`.`usertable`。 +# | +- ……但是过滤掉 `mysql` 中的其它表…… +# +- 恢复所有表…… ``` > **警告:** From 36b80aca802c24d42d3eb911c251f73ca8b6ca16 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, 7 May 2021 19:16:54 +0800 Subject: [PATCH 07/11] Apply suggestions from code review Co-authored-by: TomShawn <41534398+TomShawn@users.noreply.github.com> --- br/use-br-command-line-tool.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/br/use-br-command-line-tool.md b/br/use-br-command-line-tool.md index 7bfa5c7c78d2..4aface8cfc51 100644 --- a/br/use-br-command-line-tool.md +++ b/br/use-br-command-line-tool.md @@ -377,11 +377,11 @@ br restore full \ 增量恢复的方法和使用 BR 进行全量恢复的方法并无差别。需要注意,恢复增量数据的时候,需要保证备份时指定的 `last backup ts` 之前备份的数据已经全部恢复到目标集群。 -### 恢复创建在 `mysql` 数据库下的表 +### 恢复创建在 `mysql` 数据库下的表(实验性功能) -在 [#1048](https://github.com/pingcap/br/pull/1048) 之后,BR 可以并且默认会备份 `mysql` 数据库下的表。 +BR 可以并且会默认备份 `mysql` 数据库下的表。 -在恢复时,`mysql` 下的表默认会被 [table filter](/table-filter.md#表库过滤语法) 规则过滤掉,要恢复在 `mysql` 下的用户表的时候,可以通过 `-f` 来指定目标,例如,以下命令会恢复 `mysql.usertable`。 +在恢复时,`mysql` 下的表默认会被 [table filter](/table-filter.md#表库过滤语法) 规则过滤掉。如果需要恢复 `mysql` 下的用户表,可以通过 `-f` 来指定目标用户表。以下示例中的要恢复目标用户表为`mysql.usertable`。 {{< copyable "shell-regular" >}} @@ -395,12 +395,12 @@ br restore full -f '*.*' -f '!mysql.*' -f 'mysql.usertable' -s $external_storage > **警告:** > -> 即便系统表(例如,`mysql.tidb` 等)也可以通过这个功能备份和恢复,但是部分系统表在恢复之后可能会出现意外状况,已知的异常如下: +> 虽然系统表(例如 `mysql.tidb` 等)可以通过 BR 进行备份和恢复,但是部分系统表在恢复之后可能会出现意外状况,已知的异常如下: > > - 统计信息表(`mysql.stat_*`)无法被恢复。 > - 用户信息表(`mysql.user`)在恢复之后不会生效,直到用户手动执行 `FLUSH PRIVILEGES`。 > -> 对更多系统表恢复的兼容性测试也尚在进行中,为了防止意外,请尽量避免在生产环境中恢复系统表。 +> 恢复系统表可能还存在更多兼容性问题。为了防止意外发生,请避免在生产环境中恢复系统表。 ### Raw KV 恢复(实验性功能) From 2c89bb21ace9e0d5e37c09adc89a2674f104b006 Mon Sep 17 00:00:00 2001 From: TomShawn <41534398+TomShawn@users.noreply.github.com> Date: Fri, 28 May 2021 14:31:23 +0800 Subject: [PATCH 08/11] Update br/use-br-command-line-tool.md --- br/use-br-command-line-tool.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/br/use-br-command-line-tool.md b/br/use-br-command-line-tool.md index 4aface8cfc51..7ad51291d384 100644 --- a/br/use-br-command-line-tool.md +++ b/br/use-br-command-line-tool.md @@ -395,7 +395,7 @@ br restore full -f '*.*' -f '!mysql.*' -f 'mysql.usertable' -s $external_storage > **警告:** > -> 虽然系统表(例如 `mysql.tidb` 等)可以通过 BR 进行备份和恢复,但是部分系统表在恢复之后可能会出现意外状况,已知的异常如下: +> 虽然系统表(例如 `mysql.tidb` 等)可以通过 BR 进行备份和恢复,但是部分系统表在恢复之后可能会出现非预期的状况,已知的异常如下: > > - 统计信息表(`mysql.stat_*`)无法被恢复。 > - 用户信息表(`mysql.user`)在恢复之后不会生效,直到用户手动执行 `FLUSH PRIVILEGES`。 From 85cb515f198496b5ac9ebafff268f3ba0d36f719 Mon Sep 17 00:00:00 2001 From: TomShawn <41534398+TomShawn@users.noreply.github.com> Date: Fri, 28 May 2021 14:31:27 +0800 Subject: [PATCH 09/11] Update br/use-br-command-line-tool.md --- br/use-br-command-line-tool.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/br/use-br-command-line-tool.md b/br/use-br-command-line-tool.md index 7ad51291d384..287a52b77919 100644 --- a/br/use-br-command-line-tool.md +++ b/br/use-br-command-line-tool.md @@ -381,7 +381,7 @@ br restore full \ BR 可以并且会默认备份 `mysql` 数据库下的表。 -在恢复时,`mysql` 下的表默认会被 [table filter](/table-filter.md#表库过滤语法) 规则过滤掉。如果需要恢复 `mysql` 下的用户表,可以通过 `-f` 来指定目标用户表。以下示例中的要恢复目标用户表为`mysql.usertable`。 +在恢复时,`mysql` 下的表默认会被 [table filter](/table-filter.md#表库过滤语法) 规则过滤掉。如果需要恢复 `mysql` 下的用户表,可以添加 `-f` 来指定目标用户表。以下示例中要恢复目标用户表为`mysql.usertable`。 {{< copyable "shell-regular" >}} From 93f85ade28efc361ef985e5ed6a508826c735676 Mon Sep 17 00:00:00 2001 From: hillium Date: Thu, 8 Jul 2021 13:24:15 +0800 Subject: [PATCH 10/11] br: enhance system table restore document --- br/use-br-command-line-tool.md | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/br/use-br-command-line-tool.md b/br/use-br-command-line-tool.md index 287a52b77919..ec70eeb5c6a7 100644 --- a/br/use-br-command-line-tool.md +++ b/br/use-br-command-line-tool.md @@ -381,16 +381,22 @@ br restore full \ BR 可以并且会默认备份 `mysql` 数据库下的表。 -在恢复时,`mysql` 下的表默认会被 [table filter](/table-filter.md#表库过滤语法) 规则过滤掉。如果需要恢复 `mysql` 下的用户表,可以添加 `-f` 来指定目标用户表。以下示例中要恢复目标用户表为`mysql.usertable`。 +在执行恢复时,`mysql` 下的表默认不会被恢复。如果需要恢复 `mysql` 下的用户创建的表,可以通过 [table filter](/table-filter.md#表库过滤语法) 来显式地包含目标表。以下示例中要恢复目标用户表为 `mysql.usertable`;该命令会在执行正常的恢复的同时恢复 `mysql.usertable`。 {{< copyable "shell-regular" >}} ```shell br restore full -f '*.*' -f '!mysql.*' -f 'mysql.usertable' -s $external_storage_url -# ^ ^ ^ -# | | +- ……仅恢复 `mysql`.`usertable`。 -# | +- ……但是过滤掉 `mysql` 中的其它表…… -# +- 恢复所有表…… +``` + +在如上的命令中,使用 `-f '*.*'` 来覆盖掉默认的规则,然后通过 `-f '!mysql.*'` 来命令 BR 不要恢复 `mysql` 中的表,除非另有指定。最后的 `-f 'mysql.usertable'` 则指定需要恢复 `mysql.usertable`。具体原理请参考 [table filter 的文档](/table-filter.md#表库过滤语法)。 + +如果只需要恢复 `mysql.usertable`,而无需恢复其他表,可以使用以下命令: + +{{< copyable "shell-regular" >}} + +```shell +br restore full -f 'mysql.usertable' -s $external_storage_url ``` > **警告:** @@ -398,7 +404,9 @@ br restore full -f '*.*' -f '!mysql.*' -f 'mysql.usertable' -s $external_storage > 虽然系统表(例如 `mysql.tidb` 等)可以通过 BR 进行备份和恢复,但是部分系统表在恢复之后可能会出现非预期的状况,已知的异常如下: > > - 统计信息表(`mysql.stat_*`)无法被恢复。 -> - 用户信息表(`mysql.user`)在恢复之后不会生效,直到用户手动执行 `FLUSH PRIVILEGES`。 +> - 系统变量表(`mysql.tidb`,`mysql.global_variables`)无法被恢复。 +> - 用户信息表(`mysql.user`,`mysql.columns_priv`,等等)无法被恢复。 +> - GC 数据无法被恢复。 > > 恢复系统表可能还存在更多兼容性问题。为了防止意外发生,请避免在生产环境中恢复系统表。 From f5ebcf1fe5bf2338b6dc797a79156b1949a765cf Mon Sep 17 00:00:00 2001 From: TomShawn <41534398+TomShawn@users.noreply.github.com> Date: Thu, 8 Jul 2021 14:19:29 +0800 Subject: [PATCH 11/11] minor wording change --- br/use-br-command-line-tool.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/br/use-br-command-line-tool.md b/br/use-br-command-line-tool.md index ec70eeb5c6a7..632ecf449f82 100644 --- a/br/use-br-command-line-tool.md +++ b/br/use-br-command-line-tool.md @@ -389,7 +389,7 @@ BR 可以并且会默认备份 `mysql` 数据库下的表。 br restore full -f '*.*' -f '!mysql.*' -f 'mysql.usertable' -s $external_storage_url ``` -在如上的命令中,使用 `-f '*.*'` 来覆盖掉默认的规则,然后通过 `-f '!mysql.*'` 来命令 BR 不要恢复 `mysql` 中的表,除非另有指定。最后的 `-f 'mysql.usertable'` 则指定需要恢复 `mysql.usertable`。具体原理请参考 [table filter 的文档](/table-filter.md#表库过滤语法)。 +在如上的命令中,`-f '*.*'` 用于覆盖掉默认的规则,`-f '!mysql.*'` 指示 BR 不要恢复 `mysql` 中的表,除非另有指定。`-f 'mysql.usertable'` 则指定需要恢复 `mysql.usertable`。具体原理请参考 [table filter 的文档](/table-filter.md#表库过滤语法)。 如果只需要恢复 `mysql.usertable`,而无需恢复其他表,可以使用以下命令: