br: complete the list of unrecoverable tables (#52531)

close pingcap/tidb#52530
This commit is contained in:
Jianjun Liao
2025-01-24 22:08:50 +08:00
committed by GitHub
parent 77d35b9f0f
commit 4b98d4e74c

View File

@ -28,6 +28,13 @@ const (
sysUserTableName = "user"
)
var planPeplayerTables = map[string]map[string]struct{}{
"mysql": {
"plan_replayer_status": {},
"plan_replayer_task": {},
},
}
var statsTables = map[string]map[string]struct{}{
"mysql": {
"stats_buckets": {},
@ -62,11 +69,55 @@ var unRecoverableTable = map[string]map[string]struct{}{
"tidb": {},
"global_variables": {},
"capture_plan_baselines_blacklist": {},
// GET_LOCK() or IS_USED_LOCK() try to insert a lock into the table in a pessimistic transaction but finally rollback.
// Therefore actually the table is empty.
"advisory_locks": {},
// Table ID is recorded in the column `job_info` so that the table cannot be recovered simply.
"analyze_jobs": {},
// Table ID is recorded in the column `table_id` so that the table cannot be recovered simply.
"analyze_options": {},
// Distributed eXecution Framework
// Records the tidb node information, no need to recovered.
"dist_framework_meta": {},
"tidb_global_task": {},
"tidb_global_task_history": {},
"tidb_background_subtask": {},
"tidb_background_subtask_history": {},
// DDL internal system tables.
"tidb_ddl_history": {},
"tidb_ddl_job": {},
"tidb_ddl_reorg": {},
// Table ID is recorded in the column `schema_change` so that the table cannot be recovered simply.
"tidb_ddl_notifier": {},
// v7.2.0. Based on Distributed eXecution Framework, records running import jobs.
"tidb_import_jobs": {},
"help_topic": {},
// records the RU for each resource group temporary, no need to recovered.
"request_unit_by_group": {},
// load the table data into the memory.
"table_cache_meta": {},
// TiDB runaway internal information.
"tidb_runaway_queries": {},
"tidb_runaway_watch": {},
"tidb_runaway_watch_done": {},
// TiDB internal ttl information.
"tidb_ttl_job_history": {},
"tidb_ttl_table_status": {},
"tidb_ttl_task": {},
// TiDB internal timers.
"tidb_timers": {},
// gc info don't need to recover.
"gc_delete_range": {},
"gc_delete_range_done": {},
"index_advisor_results": {},
// TiDB internal system table to synchronize metadata locks across nodes.
"tidb_mdl_info": {},
// replace into view is not supported now
"tidb_mdl_view": {},
@ -96,6 +147,15 @@ func isStatsTable(schemaName string, tableName string) bool {
return ok
}
func isPlanReplayerTables(schemaName string, tableName string) bool {
tableMap, ok := planPeplayerTables[schemaName]
if !ok {
return false
}
_, ok = tableMap[tableName]
return ok
}
// RestoreSystemSchemas restores the system schema(i.e. the `mysql` schema).
// Detail see https://github.com/pingcap/br/issues/679#issuecomment-762592254.
func (rc *SnapClient) RestoreSystemSchemas(ctx context.Context, f filter.Filter) (rerr error) {
@ -254,6 +314,10 @@ func (rc *SnapClient) replaceTemporaryTableToSystable(ctx context.Context, ti *m
return nil
}
if isPlanReplayerTables(dbName, tableName) {
return nil
}
if isUnrecoverableTable(dbName, tableName) {
return nil
}