📣
TiDB Cloud Premium 开放公测中。为企业级工作负载提供无限扩展、即时弹性伸缩和高级安全保障。此页面由 AI 自动翻译,英文原文请见此处。

从操作错误中恢复



本指南提供了在 TiDB Cloud Lake 中从常见操作错误中恢复的分步说明。

简介

TiDB Cloud Lake 可以帮助你从以下常见操作错误中恢复:

  • 意外删除数据库
  • 意外删除表
  • 错误的数据修改(UPDATE/DELETE 操作)
  • 意外截断表
  • 数据加载错误
  • Schema Evolution 回滚(还原表结构变更)
  • 已删除的列或约束

这些恢复能力由 TiDB Cloud Lake 的 FUSE 引擎提供支持。该引擎采用类似 Git 的存储设计,可维护数据在不同时间点的快照。

恢复场景与解决方案

场景:意外删除数据库

如果你意外删除了数据库,可以使用 UNDROP DATABASE 命令将其恢复:

  1. 确认已删除的数据库:

    SHOW DROP DATABASES LIKE '%sales_data%';
  2. 恢复已删除的数据库:

    UNDROP DATABASE sales_data;
  3. 验证数据库是否已恢复:

    SHOW DATABASES;
  4. 恢复所有权(如有需要):

    GRANT OWNERSHIP on sales_data.* to ROLE <role_name>;

更多详情,请参见 UNDROP DATABASE 和 SHOW DROP DATABASES。

场景:意外删除表

如果你意外删除了表,可以使用 UNDROP TABLE 命令将其恢复:

  1. 确认已删除的表:

    SHOW DROP TABLES LIKE '%order%';
  2. 恢复已删除的表:

    UNDROP TABLE sales_data.orders;
  3. 验证表是否已恢复:

    SHOW TABLES FROM sales_data;
  4. 恢复所有权(如有需要):

    GRANT OWNERSHIP on sales_data.orders to ROLE <role_name>;

更多详情,请参见 UNDROP TABLE 和 SHOW DROP TABLES。

场景:错误的数据修改或删除

如果你意外修改或删除了表中的数据,可以使用 FLASHBACK TABLE 命令将其恢复到之前的状态:

  1. 找出错误操作发生前的快照 ID 或时间戳:

    SELECT * FROM fuse_snapshot('sales_data', 'orders');
    snapshot_id: c5c538d6b8bc42f483eefbddd000af7d snapshot_location: 29356/44446/_ss/c5c538d6b8bc42f483eefbddd000af7d_v2.json format_version: 2 previous_snapshot_id: NULL [... ...] timestamp: 2023-04-19 04:20:25.062854
  2. 将表恢复到之前的状态:

    -- Using snapshot ID ALTER TABLE sales_data.orders FLASHBACK TO (SNAPSHOT => 'c5c538d6b8bc42f483eefbddd000af7d'); -- Or using timestamp ALTER TABLE sales_data.orders FLASHBACK TO (TIMESTAMP => '2023-04-19 04:20:25.062854'::TIMESTAMP);
  3. 验证数据是否已恢复:

    SELECT * FROM sales_data.orders LIMIT 3;

更多详情,请参见 FLASHBACK TABLE。

场景:Schema Evolution 回滚

如果你对表结构进行了不需要的更改,可以回退到之前的 schema:

  1. 创建表并添加一些数据:

    CREATE OR REPLACE TABLE customers (id INT, name VARCHAR, email VARCHAR); INSERT INTO customers VALUES (1, 'John', 'john@example.com');
  2. 进行 schema 更改:

    ALTER TABLE customers ADD COLUMN phone VARCHAR; DESC customers;

    输出:

    ┌─────────┬─────────┬──────┬─────────┬─────────┐ │ Field │ Type │ Null │ Default │ Extra │ ├─────────┼─────────┼──────┼─────────┼─────────┤ │ id │ INT │ YES │ NULL │ │ │ name │ VARCHAR │ YES │ NULL │ │ │ email │ VARCHAR │ YES │ NULL │ │ │ phone │ VARCHAR │ YES │ NULL │ │ └─────────┴─────────┴──────┴─────────┴─────────┘
  3. 查找 schema 更改之前的 snapshot ID:

    SELECT * FROM fuse_snapshot('default', 'customers');

    输出:

    snapshot_id: 01963cefafbb785ea393501d2e84a425 timestamp: 2025-04-16 04:51:03.227000 previous_snapshot_id: 01963ce9cc29735b87886a08d3ca7e2f snapshot_id: 01963ce9cc29735b87886a08d3ca7e2f timestamp: 2025-04-16 04:44:37.289000 previous_snapshot_id: NULL
  4. 回退到之前的 schema(使用较早的 snapshot):

    ALTER TABLE customers FLASHBACK TO (SNAPSHOT => '01963ce9cc29735b87886a08d3ca7e2f');
  5. 验证 schema 已恢复:

    DESC customers;

    输出:

    ┌─────────┬─────────┬──────┬─────────┬─────────┐ │ Field │ Type │ Null │ Default │ Extra │ ├─────────┼─────────┼──────┼─────────┼─────────┤ │ id │ INT │ YES │ NULL │ │ │ name │ VARCHAR │ YES │ NULL │ │ │ email │ VARCHAR │ YES │ NULL │ │ └─────────┴─────────┴──────┴─────────┴─────────┘

重要注意事项和限制

  • 时间限制:恢复仅在保留时间内有效(默认:24 小时)。
  • 名称冲突:如果已存在同名对象,则无法执行 undrop——请先重命名数据库或重命名表。
  • 所有权:所有权不会自动恢复,需要在恢复后手动授予。
  • 临时表:Flashback 不适用于 transient tables(不会存储快照)。

紧急情况:遇到严重数据丢失?请立即联系 TiDB Cloud Lake Support 寻求帮助。

文档内容是否有帮助?