由于DDL语句无法回滚,如果误删除了表(例如DROP TABLE),可能会导致数据丢失。PolarDB提供了表回收站的功能,删除的表会被临时转移到表回收站,因此您可以从表回收站恢复误删的表。

背景信息

关于更多表回收站的信息,请参见表回收站

前提条件

  • 仅当集群版本为PolarDB MySQL 8.0,且内核小版本为8.0.1.1.2及以上时,才支持表回收站功能。
  • 请确保误删前已开启表回收站功能:设置集群参数recycle_binON
  • 请确保误删表的时间点在表回收站内数据的最长保留周期内。可设置集群参数recycle_bin_retention(单位:秒),定义该最长保留周期。

操作步骤

  1. 执行如下语句,查看回收站中所有临时保存的表。
    CALL DBMS_RECYCLE.show_tables()
    示例:

    使用如下语句进行查看:

    mysql> CALL DBMS_RECYCLE.show_tables();
    返回结果如下:
    +-----------------+---------------+---------------+--------------+---------------------+---------------------+
    | SCHEMA          | TABLE         | ORIGIN_SCHEMA | ORIGIN_TABLE | RECYCLED_TIME       | PURGE_TIME          |
    +-----------------+---------------+---------------+--------------+---------------------+---------------------+
    | __recycle_bin__ | __innodb_1063 | product_db    | t1           | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 |
    | __recycle_bin__ | __innodb_1064 | product_db    | t2           | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 |
    | __recycle_bin__ | __innodb_1065 | product_db    | parent       | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 |
    | __recycle_bin__ | __innodb_1066 | product_db    | child        | 2019-08-08 11:01:46 | 2019-08-15 11:01:46 |
    +-----------------+---------------+---------------+--------------+---------------------+---------------------+
    4 rows in set (0.00 sec)

    返回结果中的参数说明如下:

    参数 说明
    SCHEMA 回收站的Schema。
    TABLE 进入回收站后的表名。
    ORIGIN_SCHEMA 原始表的Schema。
    ORIGIN_TABLE 原始表的表名。
    RECYCLED_TIME 回收时间。
    PURGE_TIME 预计在回收站中被清理的时间。
  2. 执行如下语句,快速恢复回收站内的某张表。
    说明 执行此命令需要有数据库__recycle_bin__的ALTER_ACL和DROP_ACL权限,以及目标表的CREATE_ACL和INSERT_ACL权限。
    CALL DBMS_RECYCLE.restore_table('RECYCLE_TABLE','DEST_DB','DEST_TABLE');

    该语句中的参数说明如下:

    参数 说明
    RECYCLE_TABLE 需要恢复的表在回收站内的表名。
    说明 如果仅传入此参数,会恢复到原始表。
    DEST_DB 为恢复后的表指定目标数据库。
    DEST_TABLE 为恢复后的表指定新的表名。
    示例:
    mysql> call dbms_recycle.restore_table('__innodb_1063','testDB','testTable');