更新时间:2025-07-15 GMT+08:00
分享

TaurusDB库表回收站

功能介绍

由于DDL操作无法回滚,如果您误删除表或数据库,可能会导致数据丢失。TaurusDB支持库表回收站功能,删除后暂时将指定表或数据库移入“__recyclebin__”库中,并将表或数据库重命名。支持修改被删除的库表在回收站中的保留时间,您也可以随时将库表从回收站中恢复或彻底删除。

回收站中的库表将占用实例的存储空间,直到系统自动清理。如需提前释放,请手动清理回收站中的库表。

前提条件

  • 版本限制

    库表回收站功能仅支持如下版本,内核版本的查询方法请参见如何查看云数据库 TaurusDB实例的版本号

    • 内核版本为2.0.57.240900及以上时支持DROP TABLE语句使用库表回收站功能,
    • 内核版本为2.0.63.250300及以上时,支持DROP TABLE、DROP DATABASE、TRUNCATE TABLE使用库表回收站功能。
  • 权限控制
    “__recyclebin__”作为回收站临时存放被删除表的数据库,不允许对回收站中的表进行修改或删除。如需查看、恢复或者清理回收站中的表,可以通过回收站功能提供的命令对“__recyclebin__”下的表进行操作,并且操作账号需要同时对回收站中的表或恢复的目标表具有相应的操作权限,才可以进行操作,具体权限要求如下:
    • 查看回收站中表的信息:对“__recyclebin__”中表的SELECT权限。
    • 清理回收站中指定表:对“__recyclebin__”中表的DROP权限。
    • 恢复回收站中指定表:对“__recyclebin__”中表的ALTER、DROP权限,以及对恢复的目标表的CREATE、INSERT权限。

原理介绍

约束与限制

  • 如果TaurusDB实例内核版本低于2.0.57.240900,且用户手动创建了名为“__recyclebin__”的数据库,则实例升级到2.0.57.240900及以上版本时,可能出现升级预检查失败。请手动删除“__recyclebin__”数据库后重新升级。如需继续保留用户创建的“__recyclebin__”数据库作为普通数据库进行使用,请提交工单
  • 如果被删除的表为回收站不支持的类型,则DROP TABLE语句将直接删除指定表,而不会将表移入回收站。
  • 如果实例打开回收站功能,短时间内删除有同名约束的表,可能会因为“__recyclebin__”数据库下存在同名约束导致移入回收站失败。如果移入回收站失败,请检查被删除的表是否存在约束,删除约束后重新执行DROP TABLE语句进行删除。
  • 当回收站功能启用时,DROP TABLE/DROP DATABASE/TRUNCATE TABLE语句内存消耗相比直接删除会有上升,内存消耗和单条RENAME TABLE语句操作多张表基本相同。单条语句删除表数量过多时,可能出现OOM。如用户业务需要单条语句删除大量表,且开启回收站功能后易出现OOM,请使用回收站session级开关rds_recycle_bin_mode控制跳过此类业务。
  • 表回收站功能仅支持普通innodb表,不支持共享表空间、全文索引、临时表、非innodb表、存在Secondary Engine的表、系统表、隐藏表。
  • 暂不支持多租户实例的普通租户使用库表回收站功能。
  • 使用冷热分离功能归档回收站中的表后,无法使用回收站命令清理或恢复归档的表。
  • 部分备份恢复场景如表级时间点恢复,不会恢复回收站中的表。
  • DRS暂未支持回收站功能,如因开启回收站相关功能导致复制中断,请尝试重置链路,或提交工单,联系客服处理。
    • DRS不会同步单条DROP TABLE语句的Session级回收站开关,是根据目标端Global级别回收站参数,判断DROP TABLE语句在目标端实例是否将表暂存入回收站。
    • DRS不会同步源端回收站的restore_table、restore_db、purge_table、系统自动清理操作。

      如在源端实例执行restore_table、restore_db,目标端实例不会恢复对应表,后续源端对恢复后的表执行写操作会导致复制中断,建议存在复制链路的情况下,使用insert into ... select ...方式进行恢复。

  • 如源端实例回收站中的表由小于2.0.63.250300版本的实例回收生成,则通过DRS迁移后,在目标端实例无法对迁移的表执行restore命令和show命令,后台清理线程也不会自动清理。如需清理,请手动调用purge_table命令进行清理。
  • TaurusDB实例表回收站功能在2.0.57.240900版本仅支持表名由ASCII字符(如英文字母、数字、常见标点符号等)组成的表,其他表名字符类型(如拉丁字母、希腊字母、中文等)将在2.0.60.241200版本开放支持。

    若在2.0.57.240900版本对其他暂不支持字符类型表名的表进行回收和恢复,可能出现连接卡住的情况,此时请重启数据库或执行主备倒换,实例恢复后关闭回收站,对相关表进行删除。

  • 2.0.63.xxxxxx版本实例支持库表回收站,部分第三方Binlog采集工具可能出现兼容性问题,建议用户根据实际业务场景选择是否升级。升级的详细操作请参考升级TaurusDB实例内核小版本

开启库表回收站

您可以通过设置参数“rds_recycle_bin_mode”来控制库表回收站功能的开启与关闭。开启库表回收站功能后,会根据回收机制进行数据的回收。

开启库表回收站有如下两种方法:

  • 您可以单击TaurusDB实例,进入实例概览页面。在左侧导航栏中选择“参数修改”,通过修改“rds_recycle_bin_mode”参数来开启库表回收站功能。
  • 通过命令在会话中设置库表回收站功能。

    set rds_recycle_bin_mode=<mode>;

表3 库表回收站参数说明

参数名称

级别

说明

rds_recycle_bin_mode

Global、Session

回收站功能开关。

取值范围如下:

  • OFF(默认值):关闭回收站功能。
  • ON:启用回收站功能。启用功能后使用对应语句删除表,支持回收站功能的表将被移入回收站,不支持回收站功能的表将被直接删除。内核版本大于等于2.0.63.250300时支持。
  • PRIORITY_RECYCLE_BIN:当同一个DROP语句中既包含支持回收站功能的表,又包含不支持回收站的表,则删除失败报错。内核版本大于等于2.0.63.250300时已弃用。
  • PRIORITY_DROP_TABLE:当同一个DROP语句中既包含支持回收站的表,又包含不支持回收站的表,则对全部相关表执行彻底删除,无法恢复。内核版本大于等于2.0.63.250300时已弃用。

rds_recycle_scheduler

Global

后台自动清理过期表的功能开关。

取值范围如下:

  • OFF(默认值):表示关闭后台自动清理过期数据功能。后台自动清理过期数据的功能关闭后,回收站中的表将被长期保存。
  • ON:表示打开后台自动清理过期数据功能。后台自动清理过期数据的功能开启后,TaurusDB后台会自动删除回收站中达到最大保存时间的表。

rds_recycle_bin_retention

Global

回收站中表的最长保存时间(单位为秒)。

默认最长保存时间为259200秒(3天),支持的修改范围为0~2592000秒。

修改“rds_recycle_bin_retention”参数后,回收站将以表进入回收站的时间为起始时间,重新计算回收站中全部表的预计自动清理时间。

如果将参数“rds_recycle_scheduler”设置为“ON”,表在回收站中保存的时间超过设置的最长保存时间后将被自动删除,无法恢复。

rds_recycle_bin_binlog_mode

Global、Session

回收站相关DDL语句在Binlog中的记录模式。内核版本大于等于2.0.63.250300时已弃用TRANSLATE,仅支持记录原始语句。

取值范围如下:

  • ORIGIN(默认值):回收站相关语句会被直接记录到Binlog中。
  • TRANSLATE:兼容社区语法,回收站相关语句会被转换为社区版MySQL支持的语句,并记录到Binlog中,在Binlog中会将回收站操作的DROP TABLErestore_table转换记录为RENAME TABLE

管理库表回收站

表4 使用库表回收站

功能

使用介绍

示例

查看回收站中的表

使用回收站提供的show命令,可以查看回收站中表的当前库名、当前表名、原库名、原表名、移入回收站时间、自动清理时间。

使用示例

恢复回收站中的表到原库原表

使用回收站提供的restore命令,指定通过查询命令返回的表名,恢复回收站中的表到原库原表,或指定库的指定表。恢复成功后,回收站中的对应表将被删除,无法再次恢复。

使用示例

恢复回收站中所有指定原库的表

使用回收站提供的restore db命令,指定通过查询命令返回的原库名,恢复回收站中的表到原库或指定库。恢复成功后,回收站中的对应表将被删除,无法再次恢复。

使用示例

系统自动清理

您可以通过如下方法开启后台自动清理功能:

单击TaurusDB实例,进入实例概览页面。在左侧导航栏中选择“参数修改”,将参数“rds_recycle_scheduler”的值修改为“ON”

-

手动清理指定表

使用回收站提供的purge命令,指定通过查询命令返回的表名,可手动清理回收站中的表。执行清理命令后,表将被彻底删除,无法恢复。

使用示例

使用示例

表回收站功能提供以下命令用于操作回收站中暂存的表。

相关文档