云数据库 MySQL 回收站

回收站(recycle bin)功能支持将用户 drop table、truncate table 操作的表放入到回收站中,以便在需要时可以恢复这些数据,避免用户误删表的操作,也可减轻用户 drop table 对 IO 的影响。

相关产品
云数据库 MySQL 产品页,含版本规格、价格与购买入口。

一、支持版本

内核版本 MySQL 8.0 20220330及以上。

二、适用场景

用于将用户 drop table、truncate table 操作的表放入到回收站中,避免误删除数据后无法恢复的情况。

三、支持自动清理回收站中的表

前提条件

·参数 cdb_recycle_scheduler_interval 的值大于0。

·参数 event scheduler 的值为 on。

注意:说明:

·参数 cdb_recycle_bin_enabled 的值为 on。

使用方法

在满足上述前提条件的情况下支持自动清理回收站中的表,回收站的自动清理线程,会每隔 cdb recycle scheduler interval 秒后,判断在回收站中的表是否达到 cdb_recycle_bin_retention 的时间,达到后则会清理回收站中对应的表。

四、参数说明

参数名 动态 类型 默认 参数值范围 说明
cdb_recycle_bin_enabled yes bool OFF ON/OFF 回收站的开关。
cdb_recycle_bin_retention yes ulong 604800 0 – 4294966272 表示放入回收站的表在经过一定时间后会被自动清理线程清理,这里的时间是通过此参数来设置的,单位:秒,默认为604800秒(一周)。
cdb_recycle_scheduler_interval yes ulong 0 0 – 4294966272 表示自动清理线程的调度时间,代表每隔一定时间触发一次自动清理,这里的时间是通过此参数来设置的,单位:秒。默认值为0,表示不启用自动清理回收站中的表的能力。当值大于0时,表示系统会每隔设定的时间间隔启动一次自动清理任务,清除那些已超过 cdb_recycle_bin_retention 设定保留时间的表。说明:关于自动清理回收站中的表的说明和前提条件请参见 支持自动清理回收站中的表。

五、新的数据库说明

__cdb_recycle_bin__:用来存放被 drop 的表的数据库。实例启动时,会初始化一个名为 __cdb_recycle_bin__ 的数据库,作为回收站使用的专有数据库。__cdb_recycle_bin__ 是系统级数据库,无法直接进行修改和删除。

对于回收站内的表,虽然你无法直接执行 drop table 语句,但是可以使用如下语法进行清除:

clear <TABLE_NAME> from recycle_bin;或者call sys.recycle_bin_purge_table('<RECYCLE_NAME>');

·<TABLE_NAME>:进入回收站之前的表名。

·<RECYCLE_NAME>:在回收站内的表名。

六、新的系统表说明

mysql.recycle_bin_info:用来展示在回收站中表的相关信息,表的定义如下:

CREATE TABLE IF NOT EXISTS recycle_bin_info ( table_name varchar(64) NOT NULL, –回收之后,在回收站中的表名 origin_schema VARCHAR(64) NOT NULL, –回收之前所在的 db origin_table VARCHAR(64) NOT NULL, –回收之前的表名 drop_time timestamp NOT NULL, –被 drop 的时间 purge_time timestamp NOT NULL, –该表将被清理的时间 PRIMARY KEY(table_name), KEY(purge_time), KEY `idx_drop_time` (`drop_time`), KEY `idx_schema_table` (`origin_schema`,`origin_table`) ) ENGINE=INNODB CHARACTER SET latin1 STATS_PERSISTENT=0 ROW_FORMAT=DYNAMIC TABLESPACE=mysql

其中当超过 purge_time 这个时间时,在回收站的该表将被清理,可以通过参数 cdb_recycle_bin_retention 设置被 drop 的表过期的时间,该变量表示放入回收站中的表在 cdb_recycle_bin_retention 秒之后会被自动清理线程清理。

注意:说明:

注意:一张表对应的 purge_time = drop_time + cdb_recycle_bin_retention。

七、支持 truncate table

truncate table 的表可以放入到回收站中。

truncate table 限制:

·不支持 temporary table。

·不支持带 foreign key 的表。

·不支持带 table 属性的 data directory 和 index directory。

八、支持 drop tables if exists

支持 drop tables if exists,对于存在的表会放入回收站,不存在的表不做任何操作。

九、支持 drop database

drop database 时 view event trigger、procedure、function、sequence 信息会丢失,因此回收站只保证数据一定被回收,但是 view、event、trigger、procedure、function、sequence 信息可能会丢失。

十、使用语法说明

·成功开启回收站功能后,该实例所有的 drop table 的表都会放入到 __cdb_recycle_bin__ 库中,你可以使用 show recycle_bin; 或者 select mysql.recycle_bin_info; 来查看回收站中所有被回收表的相关信息。

·restore db.table from recycle_bin;将指定的表从回收站中还原,如果存在多个同名表,则返回最近删除的一个。

·restore db.table from recycle_bin with {timestamp('expr')} {recycle_name $recycle_name};如果指定 timestamp,支持从回收站还原指定表名以及删除时间的表。如果指定 recycle_name,因为 recycle_name 是唯一的,所以前面的 db 和 table 不用于查找,用 recycle_name 查找到表后 restore 的表为 db.table。因此可以用此命令恢复到其他 schema 或者修改恢复后的表名。

·restore database db_name from recycle_bin;将指定数据库的所有表都还原回去,如果包含同名表,则会报错。

·clear recycle_bin;清空整个回收站。

·clear recycle_bin {all} {db.table} {before timestamp $time};清空指定表名或者时间之前的表,如果指定的表存在多个,会删除最老的一个,如果同时指定 all,会删除所有的同名表。

·show recycle_bin;显示回收站的信息。

·drop … without recycle_bin;可以强制删除表而不是放入回收站。

赞 (0)
上一篇 4天前
下一篇 4天前