MySQL单机版Recycle Bin回收站功能

2023-10-29

最近调研了阿里的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介绍

  • 回收/清理机制
    • 回收机制执行TRUNCATE TABLE语句时,将原始表移动到专门的recycle bin目录中,并在原位置使用相同的结构创建新表。

      说明 仅RDS MySQL 8.0支持。

      执行DROP TABLE/DATABASE语句时,只保留相关的表对象,并移动到专门的recycle bin目录中。其它对象的删除策略如下:

      • 如果是与表无关的对象,根据操作语句决定是否保留,不做回收。
      • 如果是表的附属对象,可能会修改表数据的,做删除处理,例如Trigger和Foreign key。 但Column statistics不做清理,随表进入回收站。
    • 清理机制

      回收站会启动一个后台线程,来异步清理超过recycle_bin_retention时间的表对象。在清理回收站表的时候,如果遇到大表,会再启动一个后台线程异步删除大表。

  • 权限

    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中定义了两个管理接口。详细说明如下:

  • show_tables展示回收站中所有临时保存的表。命令如下:
    call dbms_recycle.show_tables();

 参数如下:

参数 说明
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');

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL单机版Recycle Bin回收站功能 的相关文章

随机推荐

  • 基于stm32F103C8T6的智能门禁(毕业设计)

    刷卡 分享一期 RC522刷卡模块做的门禁系统 上面是视频呈现 功能文字说明 拓展空间非常大 识别卡号以及卡类并显示 刷管理卡 按下按键 提示刷卡录入 刷未录入的卡即可录入 刷用户卡 按下按键 提示刷卡录入 刷未录入的卡即可录入 再次刷卡
  • 【Cesium入门】一、Cesium安装部署运行

    1 介绍 CesiumJS是一个用于Web上3D地图的JavaScript库 开发者通过Cesium 实现无插件的创建三维球 Cesium通过WebGL技术实现图形的硬件加速 并且跨平台 跨浏览器 2 Cesium项目下载 1 在官网下载压
  • java arraylist<>_Java ArrayList

    Java ArrayList的构造方法和方法 Constructor Summary Constructors ConstructorDescription Constructs an empty list with an initial
  • STM32+AIR800关于温湿度采集上传阿里云以及进行云端下发指令简单的控制

    一 主要功能实现 1 STM32采集温湿度上传至阿里云 进行云端显示 2 云端下发指令控制STM32的LED亮灭 直接控制STM32 A 的LED亮灭 以及设置定时时间自动打开和关闭LED 3 云端下发指令通过NRF24L01间接控制第二个
  • Qt学习笔记:自定义窗体的移动+控件图标

    在这里首先感谢刘大师的作品 Qt编写通用主界面导航 开源 贴上演示 本博客主要是研究了刘大师的作品然后自己总结 做点笔记 不喜勿喷 废话不多说 先贴出代码解析一下 AppInit Instance gt start 单例模式 Instanc
  • sublime的代码错误提示 挺好!后面啥问题怎么显示那个结果???

    sublime的代码错误提示 挺好 后面啥问题怎么显示那个结果 两套软件运行一样的代码结果还不一样 code blocks 每次运行还不一样的
  • 华为swot分析2020_【分析】鸿蒙2.0要来?华为开发者大会2020时间确认!

    昨天晚上九点半 华为终端官方微博正式宣布 将在2020年9月1 0日至 9 月12日正式举办华为开发者大会 HDC2020 这次大会将在广东东莞 松山湖举行 关于华为开发者大会我这里再简单讲讲 这是华为面向信息与通信领域全球开发者大会的年度
  • odoo部署极简3分钟,浏览器编程

    本篇文章将给各位小伙伴们来带重大福利 使用odoo镜像搭建一套完整的开发环境 3分钟就能让你在本地启动odoo并开发程序 不需要你安装python 不需要你安装pycharm 不需要你安装数据库 甚至都不需要你clone odoo代码 对你
  • 石墨文档,幕布,Effie,开箱评论者写出好评或差评之前的选择……

    拿着鸡蛋换石头这样的故事 多是出现在笑话大全里 想到这个画面让人觉得交易中买家脑子似乎坏掉了 笑话揭露了不公平 可在这商贾云集的当下 不对等的交易却屡见不鲜 当偶然成为了小概率 继而转变成潜移默化之后 买东西就成了一场不明就里的 押宝 谁都
  • sybase :数据库不能打开的解决办法(状态装载或可疑)

    平台资料 操作系统平台 Windows 2000 5 00 2195 Service Pack 4 数据库平台 Sysbase 12 5 server db jc database db text db jd db jh db app 现象
  • python中strip()函数的详解

    一 背景 最近对于字符串处理的过程中对strip 函数的功能不是很了解 此篇博客就对strip 函数进行解读 strip函数的解释 就字面上的意思就是 返回删除前导和尾随空格的字符串副本 如果给定了chars而不是None 则删除chars
  • 高德地图的测试key_获取高德地图key

    概述 高德地图key的设置位于系统 APP iPhone App 设置 SDK设置中 它主要用于定位 如门店系统中 开启定位 可以从APP上看到距离最近的门店 定位功能可实现 但在后台中无配置组件 如要在APP中使用定位功能 请联系响站技术
  • 测试开发 -- python实现dubbo接口的调用

    由于公司使用基于Java语言的 Dubbo技术栈 而本人对Python技术栈更为熟悉 为了使不懂JAVA代码的同学也能进行Dubbo接口层的测试 总结一个通过python实现dubbo接口调用的实现方案 一 实现原理 根据Dubbo官方文档
  • 乱糟糟的YOLOv8-detect和pose训练自己的数据集

    时代在进步 yolo在进步 我还在踏步 v8我浅搞了一下detect和pose 记录一下 我还是要吐槽一下 为啥子这个模型就放在了这个文件深处 如图 以下教程只应用于直接应用yolov8 不修改 我之前搞v7的环境 直接 pip insta
  • vs2017项目配置

    右击项目属性 一 常规配置 可以选择windos SDK版本 平台工具集 编译过程中一些编译工具的选择 输出目录 编译生成文件所在路径 配置类型 选择是动态库 静态库 还是执行程序 二 调试配置 工作目录 项目所在路径 比如动态链接库调用
  • Ubuntu-向日葵开机自启

    向日葵官方下载网址 向日葵远程控制app官方下载 贝锐向日葵官网 安装好向日葵后 打开终端 输入命令 查看软件信息 dpkg L sunloginclient 看到向日葵的安装路径是 路径是 usr local sunlogin bin s
  • Apache Struts2远程代码执行漏洞(CVE-2021-31805)安全通告

    1 事件描述 监测发现 开源应用框架Apache Struts存在远程代码执行漏洞 CVE 2021 31805 攻击者可构造恶意的OGNL表达式触发漏洞 实现远程代码执行 受影响版本为Apache Struts 2 0 0 2 5 29
  • Qt中两个窗口相互操作

    Qt中两个窗口相互操作 举一个栗子就是两个窗口相互关闭 窗口1中的pushbutton关闭窗口2 窗口2中的pushbutton关闭窗口1 Qt中的窗口都是一个一个的类 所以最开始就想到了使用类的操作方法 即使用指针 否则两个类无限调用 如
  • linux下mycat读写分离的配置

    夏尔先生 linux下mycat读写分离的配置 为什么要配置读写分离 我想我就不需要再赘述了 那么在mycat下如何进行读写分离的配置 配置之后的实际效率又如何呢 我上午根据文档捣鼓和测试了一下 这里做一下记录 最开始 我们还是要配置mys
  • MySQL单机版Recycle Bin回收站功能

    最近调研了阿里的Recycle Bin回收站功能 可以保证数据不丢失 为了防止开发或运维人员的误操作 比如DROP TABLE DATABASE TRUNCATE TABLE 这类DDL语句不具有可操作的回滚特性 而导致数据丢失 AliSQ