tencent cloud

文档反馈

回收站

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

    支持版本

    内核版本 TXSQL 8.0 3.1.15及以上。

    适用场景

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

    使用说明

    参数说明

    参数名
    动态
    类型
    默认
    参数值范围
    说明
    txsql_recycle_bin_enabled
    yes
    bool
    OFF
    ON/OFF
    回收站的开关。
    txsql_recycle_bin_db_not_visible
    yes
    bool
    ON
    ON/OFF
    控制__txsql_recycle_bin__数据库对非 tencentroot 用户不可见对开关。
    txsql_recycle_scheduler_interval
    yes
    ulong
    0
    0-18446744073709551615
    单位:秒,回收站内自动清理的时间间隔,默认为0,表示不进行自动清理。
    txsql_recycle_bin_retention
    yes
    ulong
    604800
    0-18446744073709551615
    单位:秒,决定放入回收站的表隔多久才被自动清理,默认为604800秒(一周)。
    txsql_recycle_bin_max_size
    yes
    ulong
    18446744073709551615
    0-18446744073709551615
    设置回收站最大的容量,超过该容量会报错。
    txsql_drop_if_exceed_recycle_limit
    yes
    bool
    OFF
    ON/OFF
    设置在超过回收站的容量时是否直接删除。如果超过回收站的最大容量,设置为 OFF 会直接报错,不会删除表。设置为 ON,超过最大容量后,会直接删除表,然后提示 warning 信息。

    新的数据库说明

    __txsql_recycle_bin__:用来存放被 drop 的表的数据库。实例启动时,会初始化一个名为__txsql_recycle_bin__的数据库,作为回收站使用的专有数据库。__txsql_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 这个时间时,在回收站的该表将被清理,可以通过参数 txsql_recycle_bin_retention 设置被 drop 的表过期的时间,该变量表示放入回收站中的表在 txsql_recycle_bin_retention 秒之后会被自动清理线程清理。
    说明:
    一张表对应的 purge_time = drop_time + txsql_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 信息可能会丢失。

    使用语法说明

    使用 root 账号 set global txsql_recycle_bin_enabled=on; 可以打开回收站功能。
    成功开启回收站功能后,该实例所有的 drop table 的表都会放入到__txsql_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 reycle_bin;可以强制删除表而不是放入回收站。
    在满足 txsql_recycle_scheduler_interval 的启动条件(txsql_recycle_scheduler_interval > 0 && event_scheduler==on && txsql_recycle_bin_enabled==on)后,回收站的自动清理线程,会每隔 txsql_recycle_scheduler_interval 后,扫描表中 purge_time 最小的记录,如果 purge_time > now(),则会清理该表。
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持