You need to enable JavaScript to run this app.
文档中心
云数据库 MySQL 版

云数据库 MySQL 版

复制全文
下载 pdf
功能
Recycle Bin
复制全文
下载 pdf
Recycle Bin
本文介绍了云数据库 MySQL 版提供的表回收站(Recycle Bin)特性。
支持版本
  • MySQL 8.0 版本,且内核小版本为 MySQL 8.0.32_20250815 及以上。
  • MySQL 5.7 版本,且内核小版本为 MySQL 5.7.44_20250815 及以上。
  • MySQL 8.4 版本,且内核小版本为 MySQL 8.4.7_20260415 及以上。
背景信息
数据库开发与运维人员在日常工作中,可能会因误操作执行 DROPTRUNCATE TABLE 命令而删除表。由于 MySQL 的数据定义语言(DDL)操作不支持回滚,此类操作可能直接造成数据丢失。此外,在部分场景下,运维人员删除表后,可能无法确定表中数据是否仍有使用需求,期望删除后的表能暂时保留,类似于“回收站”机制。为此,云数据库 MySQL 版推出了表回收站(Recycle Bin) 特性:
  • 开启表回收站特性后,用户删除的表会自动转移至回收站暂存,避免误删导致数据直接丢失。
  • 支持通过专属接口查询回收站中的表信息,便于确认数据状态。
  • 允许自定义回收站中表的保留时长,到期后系统将在后台自动清理,兼顾数据安全与存储空间管理。
特性说明
Recycle Bin 功能包含了回收和清理表的能力。
回收功能
在开启 Recycle Bin(回收站)特性的前提下,用户执行不同数据删除操作时,数据及表结构的处理逻辑如下:
  1. 执行 DROP TABLE / DROP DATABASE 操作:对应的表 / 库数据不会直接删除,而是被移动至 Recycle Bin 专属的 SCHEMA 中暂存。
  1. 执行 TRUNCATE TABLE 操作:系统会先将原始表(含表结构及数据)移动至 Recycle Bin 专属的 SCHEMA,随后在原表位置自动创建一张与原始表结构完全一致的新表(新表无历史数据)。
说明
仅 MySQL 8.0 版本的云数据库 MySQL 版实例支持 TRUNCATE TABLE 的回收站特性。
在表被移入回收站后,系统会采用 __<Storage Engine>_<Table ID> 的格式对其重命名。采用该命名规则的核心原因是:用户可能在不同 SCHEMA 下创建同名表,而表 ID 具备全局唯一性,可有效避免回收站中表名冲突,确保每个回收表的标识独立可区分。
此外,表移入回收站时,系统会自动记录其关键元信息,包括原所属 SCHEMA、原表名、回收时间。这些信息可帮助用户快速将回收站中的表与原始表进行精准关联,且所有记录的元信息均支持通过对应接口查询。
清理功能
回收站特性支持两种清理方式,分别为手动清理与基于保留时间的自动清理,满足用户不同场景下的垃圾回收需求:
  • 手动清理:回收站特性通过提供专用的 dbms 包,支持用户调用 dbms 接口主动触发清理操作,实现对回收站中指定表对象的精准删除。
  • 自动清理:用户可按需开启自动清理功能,并预设回收站表对象的保留时长。功能开启后,系统会启动后台异步线程,持续检测并自动清理超出设定保留时长的表对象,无需人工干预。
使用说明
参数说明
云数据库 MySQL 版设计了以下参数用于管理 Recycle Bin 特性,您可以通过修改以下参数对 Recycle Bin 特性进行开启、关闭和设定。更多关于修改参数的详细信息,请参见修改参数
参数名
说明
生效范围
取值范围
默认值
loose_recycle_bin
是否开启回收站特性。
GLOBAL/SESSION
ON/OFF
OFF
loose_recycle_scheduler
是否开启回收站自动清理功能。
GLOBAL
ON/OFF
OFF
loose_recycle_bin_retention
回收站数据的保留时长。
GLOBAL
1 - 31536000 (单位秒,最大 365 天)
604800(7 天)
loose_recycle_scheduler_interval
回收站自动清理功能的定期检查周期。
GLOBAL
1-60(单位秒)
30
接口说明
云数据库 MySQL 版的 Recycle Bin 特性还提供了 dbms_recycle 包用于查询和管理回收站特性。
  • dbms_recycle.show_tables():用于查看回收站中临时保存的表。
  • 使用示例:
  • mysql> call dbms_recycle.show_tables();
    +-----------------+--------------+---------------+--------------+---------------------+------------+
    | SCHEMA | TABLE | ORIGIN_SCHEMA | ORIGIN_TABLE | RECYCLED_TIME | PURGE_TIME |
    +-----------------+--------------+---------------+--------------+---------------------+------------+
    | __recycle_bin__ | __innodb_19 | db_recycle | t1 | 2025-08-25 21:22:41 | NULL |
    | __recycle_bin__ | __innodb_158 | test | l2 | 2025-08-26 11:35:33 | NULL |
    | __recycle_bin__ | __innodb_116 | test | t | 2025-09-06 10:50:50 | NULL |
    +-----------------+--------------+---------------+--------------+---------------------+------------+
    3 rows in set (0.00 sec)
  • 输出的各个指标含义如下:
  • 参数
    说明
    SCHEMA
    回收站的数据库名。
    TABLE
    进入回收站后的表名。
    ORIGIN_SCHEMA
    原数据库名。
    ORIGIN_TABLE
    原表名。
    RECYCLED_TIME
    回收时间。
    PURGE_TIME
    预计从回收站删除的时间。
  • dbms_recycle.purge_table('<TABLE>'):用于手动清理回收站中的表。
  • 其中传入的参数 <TABLE> 是通过 dbms_recycle.show_tables() 接口查出来的 TABLE 这一列的结果。
  • 使用示例:
  • call dbms_recycle.purge_table('__innodb_19');
  • dbms_recycle.restore_table('<RECYCLE_TABLE>','<DEST_DB>','<DEST_TABLE>'):用于将回收站中的数据恢复到用户 SCHEMA 中。
说明
执行 restore_table 命令需要 SUPER 权限,暂不支持手动执行。以下 SQL 仅为示例语句。
  • dbms_recycle.restore_table('<RECYCLE_TABLE>','<DEST_DB>','<DEST_TABLE>')
  • 参数说明如下:
  • 参数
    说明
    RECYCLE_TABLE
    需要恢复的回收站内的表名。
    说明
    如果仅传入此参数,会恢复到原始表。
    DEST_DB
    目标数据库名。
    DEST_TABLE
    目标表名。
  • 示例:
  • mysql> call dbms_recycle.restore_table('__innodb_19','DB','Table');
使用示例
  • 创建表并插入数据:
  • mysql> use test;
    mysql> create table t(a int);
    Query OK, 0 rows affected (0.01 sec)
    mysql> insert into t values (1), (2), (3);
    Query OK, 3 rows affected (0.00 sec)
  • 会话级别开启 Recycle Bin 功能,并删除表:
  • mysql> set session loose_recycle_bin = on;
    Query OK, 0 rows affected (0.00 sec)
    mysql> drop table t;
    Query OK, 0 rows affected (0.00 sec)
  • 通过接口查看回收站:
  • mysql> call dbms_recycle.show_tables();
    +-----------------+-------------+---------------+--------------+---------------------+------------+
    | SCHEMA | TABLE | ORIGIN_SCHEMA | ORIGIN_TABLE | RECYCLED_TIME | PURGE_TIME |
    +-----------------+-------------+---------------+--------------+---------------------+------------+
    | __recycle_bin__ | __innodb_42 | test | t | 2025-09-09 16:18:12 | NULL |
    +-----------------+-------------+---------------+--------------+---------------------+------------+
    1 row in set (0.00 sec)
  • 通过 insert into select 的方式恢复数据:
  • mysql> create table t(a int);
    Query OK, 0 rows affected (0.00 sec)
    mysql> insert into t select * from __recycle_bin__.__innodb_42;
    Query OK, 3 rows affected (0.00 sec)
    Records: 3 Duplicates: 0 Warnings: 0
    mysql> select * from t;
    +------+
    | a |
    +------+
    | 1 |
    | 2 |
    | 3 |
    +------+
    3 rows in set (0.00 sec)
  • 通过接口手动清理回收站中的数据:
  • mysql> call dbms_recycle.purge_table('__innodb_42');
    Query OK, 0 rows affected (0.01 sec)
    mysql> call dbms_recycle.show_tables();
    Empty set (0.00 sec)
注意事项
云数据库 MySQL 版实例启动时,会初始化一个名为 __recycle_bin__ 的数据库,作为回收站使用的专有数据库。__recycle_bin__ 是系统级数据库,您无法直接进行修改和删除。
对于回收站内的表,虽然您无法直接对其执行 drop table 语句,但是可以使用 dbms_recycle.purge_table(); 进行清理。要求用户账号在原表和回收站表都需要具有 DROP 权限。
最近更新时间:2026.08.27 11:24:31
这个页面对您有帮助吗?
有用
有用
无用
无用