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暂未支持回收站功能,如因开启回收站相关功能导致复制中断,请尝试重置链路,或提交工单,联系客服处理。
- 如源端实例回收站中的表由小于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”参数来开启库表回收站功能。
- 通过命令在会话中设置库表回收站功能。
参数名称 |
级别 |
说明 |
---|---|---|
rds_recycle_bin_mode |
Global、Session |
回收站功能开关。 取值范围如下:
|
rds_recycle_scheduler |
Global |
后台自动清理过期表的功能开关。 取值范围如下:
|
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,仅支持记录原始语句。 取值范围如下:
|
管理库表回收站
功能 |
使用介绍 |
示例 |
---|---|---|
查看回收站中的表 |
使用回收站提供的show命令,可以查看回收站中表的当前库名、当前表名、原库名、原表名、移入回收站时间、自动清理时间。 |
|
恢复回收站中的表到原库原表 |
使用回收站提供的restore命令,指定通过查询命令返回的表名,恢复回收站中的表到原库原表,或指定库的指定表。恢复成功后,回收站中的对应表将被删除,无法再次恢复。 |
|
恢复回收站中所有指定原库的表 |
使用回收站提供的restore db命令,指定通过查询命令返回的原库名,恢复回收站中的表到原库或指定库。恢复成功后,回收站中的对应表将被删除,无法再次恢复。 |
|
系统自动清理 |
您可以通过如下方法开启后台自动清理功能: 单击TaurusDB实例,进入实例概览页面。在左侧导航栏中选择“参数修改”,将参数“rds_recycle_scheduler”的值修改为“ON”。 |
- |
手动清理指定表 |
使用回收站提供的purge命令,指定通过查询命令返回的表名,可手动清理回收站中的表。执行清理命令后,表将被彻底删除,无法恢复。 |
使用示例
表回收站功能提供以下命令用于操作回收站中暂存的表。