From c3ab93933fa0a91e6b61578beaf67da5492f15b9 Mon Sep 17 00:00:00 2001 From: Jianjun Liao Date: Tue, 21 Jan 2025 14:16:14 +0800 Subject: [PATCH 1/8] add unrecoverable system tables list Signed-off-by: Jianjun Liao --- br/br-system-tables.md | 60 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 br/br-system-tables.md diff --git a/br/br-system-tables.md b/br/br-system-tables.md new file mode 100644 index 000000000000..a5a05935efa5 --- /dev/null +++ b/br/br-system-tables.md @@ -0,0 +1,60 @@ +--- +title: 快照恢复时无法恢复的系统表 +summary: 列出快照恢复时无法恢复的系统表 +--- + +# 快照恢复时无法恢复的系统表 + +在使用快照备份来备份集群时,BR 会将系统表备份为库名带 `__TiDB_BR_Temporary_` 前缀的表,例如表 `mysql.user` 将会被备份为 `__TiDB_BR_Temporary_mysql.user`. 因此在进行快照恢复时会首先恢复一系列库名带 `__TiDB_BR_Temporary_` 前缀的系统表,避免与恢复集群现有的系统表中的数据冲突。当 BR 开始恢复系统表时,会通过 `REPLACE INTO` 的 SQL 将数据从库名带 `__TiDB_BR_Temporary_` 前缀的表写入到对应的系统表中。 + +下面列出了快照恢复无法通过上述方式进行恢复的系统表。 + +* `mysql` + * `advisory_locks` + * `analyze_jobs` + * `analyze_options` + * `capture_plan_baselines_blacklist` + * `column_stats_usage` + * `dist_framework_meta` + * `gc_delete_range` + * `gc_delete_range_done` + * `global_variables` + * `help_topic` + * `index_advisor_results` + * `plan_replayer_status` + * `plan_replayer_task` + * `request_unit_by_group` + * `stats_buckets` + * `stats_extended` + * `stats_feedback` + * `stats_fm_sketch` + * `stats_histograms` + * `stats_history` + * `stats_meta` + * `stats_meta_history` + * `stats_table_locked` + * `stats_top_n` + * `table_cache_meta` + * `tidb` + * `tidb_background_subtask` + * `tidb_background_subtask_history` + * `tidb_ddl_history` + * `tidb_ddl_job` + * `tidb_ddl_notifier` + * `tidb_ddl_reorg` + * `tidb_global_task` + * `tidb_global_task_history` + * `tidb_import_jobs` + * `tidb_mdl_info` + * `tidb_mdl_view` + * `tidb_pitr_id_map` + * `tidb_runaway_queries` + * `tidb_runaway_watch` + * `tidb_runaway_watch_done` + * `tidb_timers` + * `tidb_ttl_job_history` + * `tidb_ttl_table_status` + * `tidb_ttl_task` + +* `sys` + * `schema_unused_indexes` From 3205b5ffc7e0e9d4171d07a3031e947c6118d3dd Mon Sep 17 00:00:00 2001 From: Jianjun Liao Date: Tue, 21 Jan 2025 14:32:01 +0800 Subject: [PATCH 2/8] fix typos Signed-off-by: Jianjun Liao --- br/br-system-tables.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/br/br-system-tables.md b/br/br-system-tables.md index a5a05935efa5..13fd3aea7021 100644 --- a/br/br-system-tables.md +++ b/br/br-system-tables.md @@ -26,14 +26,14 @@ summary: 列出快照恢复时无法恢复的系统表 * `request_unit_by_group` * `stats_buckets` * `stats_extended` - * `stats_feedback` - * `stats_fm_sketch` - * `stats_histograms` - * `stats_history` - * `stats_meta` - * `stats_meta_history` - * `stats_table_locked` - * `stats_top_n` + * `stats_feedback` + * `stats_fm_sketch` + * `stats_histograms` + * `stats_history` + * `stats_meta` + * `stats_meta_history` + * `stats_table_locked` + * `stats_top_n` * `table_cache_meta` * `tidb` * `tidb_background_subtask` From 1fa8ba62008d3847ed262189503dbf56b6c59d18 Mon Sep 17 00:00:00 2001 From: Jianjun Liao Date: Thu, 27 Feb 2025 17:30:13 +0800 Subject: [PATCH 3/8] move to another place Signed-off-by: Jianjun Liao --- br/br-snapshot-guide.md | 33 ++++++++++++++++++++++- br/br-system-tables.md | 60 ----------------------------------------- 2 files changed, 32 insertions(+), 61 deletions(-) delete mode 100644 br/br-system-tables.md diff --git a/br/br-snapshot-guide.md b/br/br-snapshot-guide.md index 305ae8b8fa4f..3c5b3e58d41c 100644 --- a/br/br-snapshot-guide.md +++ b/br/br-snapshot-guide.md @@ -129,6 +129,8 @@ tiup br restore full \ ### 恢复 `mysql` 数据库下的表 +在使用[快照备份](/br/br-snapshot-guide.md)功能备份集群时,BR 会将系统表备份为库名带有 `__TiDB_BR_Temporary_` 前缀的表。例如,`mysql.user` 表会被备份为 `__TiDB_BR_Temporary_mysql.user`。因此,在执行快照恢复时,BR 会首先恢复这些带有 `__TiDB_BR_Temporary_` 前缀的系统表,以避免与恢复集群中现有的系统表数据发生冲突。在恢复系统表时,BR 会通过 `REPLACE INTO` 语句将数据从带有 `__TiDB_BR_Temporary_` 前缀的表数据写入对应的系统表。 + - `br` v5.1.0 开始,快照备份时默认自动备份 **mysql schema 下的系统表数据**,但恢复数据时默认不恢复系统表数据。 - `br` v6.2.0 开始,增加恢复参数 `--with-sys-table` 支持恢复数据的同时恢复**部分系统表相关数据**。 - `br` v7.6.0 开始,恢复参数 `--with-sys-table` 默认开启,即默认支持恢复数据的同时恢复**部分系统表相关数据**。 @@ -153,15 +155,24 @@ tiup br restore full \ - 统计信息表 (`mysql.stat_*`) (但可以恢复统计信息,详细参考[备份统计信息](/br/br-snapshot-manual.md#备份统计信息)) - 系统变量表 (`mysql.tidb`、`mysql.global_variables`) -- [其他系统表](https://github.com/pingcap/tidb/blob/master/br/pkg/restore/snap_client/systable_restore.go#L31) +- [其他系统表](https://github.com/pingcap/tidb/blob/master/br/pkg/restore/snap_client/systable_restore.go#L66) ``` +-----------------------------------------------------+ +| advisory_locks | +| analyze_jobs | +| analyze_options | | capture_plan_baselines_blacklist | | column_stats_usage | +| dist_framework_meta | | gc_delete_range | | gc_delete_range_done | | global_variables | +| help_topic | +| index_advisor_results | +| plan_replayer_status | +| plan_replayer_task | +| request_unit_by_group | | stats_buckets | | stats_extended | | stats_feedback | @@ -172,7 +183,27 @@ tiup br restore full \ | stats_meta_history | | stats_table_locked | | stats_top_n | +| table_cache_meta | | tidb | +| tidb_background_subtask | +| tidb_background_subtask_history | +| tidb_ddl_history | +| tidb_ddl_job | +| tidb_ddl_notifier | +| tidb_ddl_reorg | +| tidb_global_task | +| tidb_global_task_history | +| tidb_import_jobs | +| tidb_mdl_info | +| tidb_mdl_view | +| tidb_pitr_id_map | +| tidb_runaway_queries | +| tidb_runaway_watch | +| tidb_runaway_watch_done | +| tidb_timers | +| tidb_ttl_job_history | +| tidb_ttl_table_status | +| tidb_ttl_task | +-----------------------------------------------------+ ``` diff --git a/br/br-system-tables.md b/br/br-system-tables.md deleted file mode 100644 index 13fd3aea7021..000000000000 --- a/br/br-system-tables.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: 快照恢复时无法恢复的系统表 -summary: 列出快照恢复时无法恢复的系统表 ---- - -# 快照恢复时无法恢复的系统表 - -在使用快照备份来备份集群时,BR 会将系统表备份为库名带 `__TiDB_BR_Temporary_` 前缀的表,例如表 `mysql.user` 将会被备份为 `__TiDB_BR_Temporary_mysql.user`. 因此在进行快照恢复时会首先恢复一系列库名带 `__TiDB_BR_Temporary_` 前缀的系统表,避免与恢复集群现有的系统表中的数据冲突。当 BR 开始恢复系统表时,会通过 `REPLACE INTO` 的 SQL 将数据从库名带 `__TiDB_BR_Temporary_` 前缀的表写入到对应的系统表中。 - -下面列出了快照恢复无法通过上述方式进行恢复的系统表。 - -* `mysql` - * `advisory_locks` - * `analyze_jobs` - * `analyze_options` - * `capture_plan_baselines_blacklist` - * `column_stats_usage` - * `dist_framework_meta` - * `gc_delete_range` - * `gc_delete_range_done` - * `global_variables` - * `help_topic` - * `index_advisor_results` - * `plan_replayer_status` - * `plan_replayer_task` - * `request_unit_by_group` - * `stats_buckets` - * `stats_extended` - * `stats_feedback` - * `stats_fm_sketch` - * `stats_histograms` - * `stats_history` - * `stats_meta` - * `stats_meta_history` - * `stats_table_locked` - * `stats_top_n` - * `table_cache_meta` - * `tidb` - * `tidb_background_subtask` - * `tidb_background_subtask_history` - * `tidb_ddl_history` - * `tidb_ddl_job` - * `tidb_ddl_notifier` - * `tidb_ddl_reorg` - * `tidb_global_task` - * `tidb_global_task_history` - * `tidb_import_jobs` - * `tidb_mdl_info` - * `tidb_mdl_view` - * `tidb_pitr_id_map` - * `tidb_runaway_queries` - * `tidb_runaway_watch` - * `tidb_runaway_watch_done` - * `tidb_timers` - * `tidb_ttl_job_history` - * `tidb_ttl_table_status` - * `tidb_ttl_task` - -* `sys` - * `schema_unused_indexes` From c9586398d1552a57b9f2d9f4294a70de0e4863a3 Mon Sep 17 00:00:00 2001 From: Aolin Date: Thu, 27 Feb 2025 17:31:37 +0800 Subject: [PATCH 4/8] Apply suggestions from code review --- br/br-snapshot-guide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/br/br-snapshot-guide.md b/br/br-snapshot-guide.md index 3c5b3e58d41c..370452da4534 100644 --- a/br/br-snapshot-guide.md +++ b/br/br-snapshot-guide.md @@ -129,7 +129,7 @@ tiup br restore full \ ### 恢复 `mysql` 数据库下的表 -在使用[快照备份](/br/br-snapshot-guide.md)功能备份集群时,BR 会将系统表备份为库名带有 `__TiDB_BR_Temporary_` 前缀的表。例如,`mysql.user` 表会被备份为 `__TiDB_BR_Temporary_mysql.user`。因此,在执行快照恢复时,BR 会首先恢复这些带有 `__TiDB_BR_Temporary_` 前缀的系统表,以避免与恢复集群中现有的系统表数据发生冲突。在恢复系统表时,BR 会通过 `REPLACE INTO` 语句将数据从带有 `__TiDB_BR_Temporary_` 前缀的表数据写入对应的系统表。 +在使用快照备份功能备份集群时,BR 会将系统表备份为库名带有 `__TiDB_BR_Temporary_` 前缀的表。例如,`mysql.user` 表会被备份为 `__TiDB_BR_Temporary_mysql.user`。因此,在执行快照恢复时,BR 会首先恢复这些带有 `__TiDB_BR_Temporary_` 前缀的系统表,以避免与恢复集群中现有的系统表数据发生冲突。在恢复系统表时,BR 会通过 `REPLACE INTO` 语句将数据从带有 `__TiDB_BR_Temporary_` 前缀的表数据写入对应的系统表。 - `br` v5.1.0 开始,快照备份时默认自动备份 **mysql schema 下的系统表数据**,但恢复数据时默认不恢复系统表数据。 - `br` v6.2.0 开始,增加恢复参数 `--with-sys-table` 支持恢复数据的同时恢复**部分系统表相关数据**。 From 75961cc3ad9e09abe58de0171bb45a990b10ac0c Mon Sep 17 00:00:00 2001 From: Jianjun Liao Date: Mon, 3 Mar 2025 11:11:46 +0800 Subject: [PATCH 5/8] commit some suggestions Signed-off-by: Jianjun Liao --- faq/backup-and-restore-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/faq/backup-and-restore-faq.md b/faq/backup-and-restore-faq.md index d2de7148558e..d8b62cbd7cee 100644 --- a/faq/backup-and-restore-faq.md +++ b/faq/backup-and-restore-faq.md @@ -279,7 +279,7 @@ br restore full -f 'mysql.usertable' -s $external_storage_url --with-sys-table - 统计信息表(`mysql.stat_*`)(但可以恢复统计信息,详细参考[备份统计信息](/br/br-snapshot-manual.md#备份统计信息)) - 系统变量表(`mysql.tidb`、`mysql.global_variables`) -- [其他系统表](https://github.com/pingcap/tidb/blob/master/br/pkg/restore/snap_client/systable_restore.go#L31) +- [其他系统表](https://github.com/pingcap/tidb/blob/master/br/pkg/restore/snap_client/systable_restore.go#L66) ### 恢复的时候,报错 `cannot file rewrite rule`,该如何处理? From 5dae0e13c2ebb7fa1f72420e7554bd9e2be0a553 Mon Sep 17 00:00:00 2001 From: Aolin Date: Mon, 10 Mar 2025 11:24:42 +0800 Subject: [PATCH 6/8] Apply suggestions from code review Co-authored-by: Grace Cai --- br/br-snapshot-guide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/br/br-snapshot-guide.md b/br/br-snapshot-guide.md index 370452da4534..583238c81b08 100644 --- a/br/br-snapshot-guide.md +++ b/br/br-snapshot-guide.md @@ -129,7 +129,7 @@ tiup br restore full \ ### 恢复 `mysql` 数据库下的表 -在使用快照备份功能备份集群时,BR 会将系统表备份为库名带有 `__TiDB_BR_Temporary_` 前缀的表。例如,`mysql.user` 表会被备份为 `__TiDB_BR_Temporary_mysql.user`。因此,在执行快照恢复时,BR 会首先恢复这些带有 `__TiDB_BR_Temporary_` 前缀的系统表,以避免与恢复集群中现有的系统表数据发生冲突。在恢复系统表时,BR 会通过 `REPLACE INTO` 语句将数据从带有 `__TiDB_BR_Temporary_` 前缀的表数据写入对应的系统表。 +在使用快照备份功能备份集群时,BR 会将系统表备份为库名带有 `__TiDB_BR_Temporary_` 前缀的表。例如,`mysql.user` 表会被备份为 `__TiDB_BR_Temporary_mysql.user`。因此,在执行快照恢复时,BR 会首先恢复这些带有 `__TiDB_BR_Temporary_` 前缀的表,避免与目标集群中现有的系统表数据发生冲突。在恢复系统表时,BR 会通过 `REPLACE INTO` 语句将数据从带有 `__TiDB_BR_Temporary_` 前缀的表写入对应的系统表。 - `br` v5.1.0 开始,快照备份时默认自动备份 **mysql schema 下的系统表数据**,但恢复数据时默认不恢复系统表数据。 - `br` v6.2.0 开始,增加恢复参数 `--with-sys-table` 支持恢复数据的同时恢复**部分系统表相关数据**。 From 5fa2f81a0df46b6849da8b4ef8f01bb417419035 Mon Sep 17 00:00:00 2001 From: Jianjun Liao Date: Fri, 21 Mar 2025 09:49:12 +0800 Subject: [PATCH 7/8] fix link Signed-off-by: Jianjun Liao --- br/br-snapshot-guide.md | 2 +- faq/backup-and-restore-faq.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/br/br-snapshot-guide.md b/br/br-snapshot-guide.md index 370452da4534..223095508e95 100644 --- a/br/br-snapshot-guide.md +++ b/br/br-snapshot-guide.md @@ -155,7 +155,7 @@ tiup br restore full \ - 统计信息表 (`mysql.stat_*`) (但可以恢复统计信息,详细参考[备份统计信息](/br/br-snapshot-manual.md#备份统计信息)) - 系统变量表 (`mysql.tidb`、`mysql.global_variables`) -- [其他系统表](https://github.com/pingcap/tidb/blob/master/br/pkg/restore/snap_client/systable_restore.go#L66) +- 其他系统表 ``` +-----------------------------------------------------+ diff --git a/faq/backup-and-restore-faq.md b/faq/backup-and-restore-faq.md index d8b62cbd7cee..9eed69ff07e8 100644 --- a/faq/backup-and-restore-faq.md +++ b/faq/backup-and-restore-faq.md @@ -279,7 +279,7 @@ br restore full -f 'mysql.usertable' -s $external_storage_url --with-sys-table - 统计信息表(`mysql.stat_*`)(但可以恢复统计信息,详细参考[备份统计信息](/br/br-snapshot-manual.md#备份统计信息)) - 系统变量表(`mysql.tidb`、`mysql.global_variables`) -- [其他系统表](https://github.com/pingcap/tidb/blob/master/br/pkg/restore/snap_client/systable_restore.go#L66) +- 其他系统表(详细参考[不能恢复系统表](/br/br-snapshot-guide.md#恢复-mysql-数据库下的表)) ### 恢复的时候,报错 `cannot file rewrite rule`,该如何处理? From 22c9511e14329c85a96e30930dca43cc675e37e6 Mon Sep 17 00:00:00 2001 From: Aolin Date: Fri, 21 Mar 2025 10:31:21 +0800 Subject: [PATCH 8/8] Apply suggestions from code review --- faq/backup-and-restore-faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/faq/backup-and-restore-faq.md b/faq/backup-and-restore-faq.md index 9eed69ff07e8..03ce795c2f8d 100644 --- a/faq/backup-and-restore-faq.md +++ b/faq/backup-and-restore-faq.md @@ -279,7 +279,7 @@ br restore full -f 'mysql.usertable' -s $external_storage_url --with-sys-table - 统计信息表(`mysql.stat_*`)(但可以恢复统计信息,详细参考[备份统计信息](/br/br-snapshot-manual.md#备份统计信息)) - 系统变量表(`mysql.tidb`、`mysql.global_variables`) -- 其他系统表(详细参考[不能恢复系统表](/br/br-snapshot-guide.md#恢复-mysql-数据库下的表)) +- 其他系统表(详细参考[恢复 `mysql` 数据库下的表](/br/br-snapshot-guide.md#恢复-mysql-数据库下的表)) ### 恢复的时候,报错 `cannot file rewrite rule`,该如何处理?