最近调研了阿里的Recycle Bin回收站功能,可以保证数据不丢失。
为了防止开发或运维人员的误操作,比如DROP TABLE/DATABASE、TRUNCATE TABLE,这类DDL语句不具有可操作的回滚特性,而导致数据丢失,AliSQL 8.0(基于MySQL)新特性支持回收站功能(Recycle Bin),临时把删除的表转移到回收站,并保留可设置的时间,方便用户找回数据。为了方便,提供了 DBMS_RECYCLE package 作为管理接口。
前提条件 MySQL单机版
实例版本如下:
- RDS MySQL 8.0
- RDS MySQL 5.7
Recycle Bin参数
Recycle Bin设计了如下五个参数。
参数 |
说明 |
loose_recycle_bin |
是否打开回收站功能,包括session级别和global级别。您可以在控制台修改参数。默认值:OFF。 |
loose_recycle_bin_retention |
回收站保留时间,单位:秒。默认为604800,即一周。您可以在控制台修改参数。 |
loose_recycle_scheduler |
是否打开回收站的异步清理任务线程。您可以在控制台修改参数。默认值:OFF。 |
loose_recycle_scheduler_interval |
回收站异步清理任务线程的轮询间隔,单位:秒。默认为30。暂不开放。 |
loose_recycle_scheduler_purge_table_print |
是否打印异步清理现场工作的详细日志。暂不开放。 |
Recycle Bin介绍
- 回收/清理机制
- 权限
RDS MySQL实例启动时,会初始化一个名为__recycle_bin__的数据库,作为回收站使用的专有数据库。__recycle_bin__是系统级数据库,您无法直接进行修改和删除。
对于回收站内的表,虽然您无法直接执行drop table
语句,但是可以使用call dbms_recycle.purge_table('<TABLE>');
进行清理。
说明 账号在原表和回收站表都需要具有DROP权限。
- 回收站表命名规则
Recycle Bin会从不同的数据库回收到统一的__recycle_bin__数据库中,所以需要保证目标表表名唯一,所以定义了如下命名格式:
"__" + <Storage Engine> + <SE private id>
参数说明如下。
参数 |
说明 |
Storage Engine |
存储引擎名称。 |
SE private id |
存储引擎为每一个表生成的唯一值。例如在InnoDB引擎中就是table id。 |
独立回收
回收的设置只会影响该实例本身,不会影响到binlog复制到的节点(备实例、只读实例和灾备实例)上。例如我们可以在主实例上设置回收,保留7天;在备实例上设置回收,保留14天。
注意事项
- 如果回收站数据库和待回收的表跨了文件系统,执行
drop table
语句将会搬迁表空间文件,耗时较长。
- 如果Tablespace为General,可能会存在多个表共享同一个表空间的情况,当回收其中一张表的时候,不会搬迁相关的表空间文件。
管理Recycle Bin
AliSQL在DBMS_RECYCLE中定义了两个管理接口。详细说明如下:
![](https://img-blog.csdnimg.cn/bbb0f62b21964234ab7b48a4162f47b2.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5LiA57yV6Ziz5YWJYQ==,size_17,color_FFFFFF,t_70,g_se,x_16)
参数如下:
参数 |
说明 |
SCHEMA |
回收站的数据库名。 |
TABLE |
进入回收站后的表名。 |
ORIGIN_SCHEMA |
原数据库名。 |
ORIGIN_TABLE |
原表名。 |
RECYCLED_TIME |
回收时间。 |
PURGE_TIME |
预计从回收站删除的时间。 |
purge_table
手动清理回收站中的表。命令如下:
call dbms_recycle.purge_table('<TABLE>');
- TABLE为进入回收站后的表名。
- 账号在原表和回收站表都需要具有DROP权限。
示例:
call dbms_recycle.purge_table('__innodb_1063');
![](https://img-blog.csdnimg.cn/03016245b3d14e6ab7deee53a4614558.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5LiA57yV6Ziz5YWJYQ==,size_17,color_FFFFFF,t_70,g_se,x_16)