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回收站功能 的相关文章

  • 同一配置文件上的两个不同提供程序

    我在用着实体框架 6 1 0 I have 2 家提供者 MysqlClient 和 SQLServerCE 我需要创建2个不同的DBContext 这迫使我创造2个配置类因为mysql有一些不同的东西 但是当我初始化应用程序时 Datab
  • 映射 mysql 中同一个表的多个值

    您好 我必须使用另一个表中的值 id 获取文本值 表 1 包含值 ID 表 2 包含名称和值 ID 表 1 SEVERITY OCCURENCE DETECTABILITY 2 3 4 表 2 id name value 1 Very Hi
  • 如何在mysql中选择具有相同值集的列?

    我的桌子是 patients pid name city disease did dname has disease did pid 我想列出具有相同疾病组的患者 pid 和 did 分别是患者和疾病表中的主键 并且是 has diseas
  • 不允许在 php 中连接到此 MariaDB 服务器

    我尝试在 php 中连接远程服务器数据库 但出现以下错误 Host xx xxx xx xx is not allowed to connect to this MariaDB server in 我的连接代码是这样的 servername
  • covertJSONtoSQL 在 NiFi 中返回空值

    我正在设计一项工作 使用以下命令将数据从 MySQL 中的数据库转移到另一个数据库 MySQL 执行SQL处理器随后将Avro转换为Json then 将Json转换为SQL then PutSQL如下流程图所示 将JSON转换为SQL返回
  • 在 MySQL 中对整数字段运行带引号的数字(字符串)查询时会发生哪些复杂情况

    在 SQL 中 不应引用整数 因为如果引用 它将是一个字符串 但我很好奇如果我这样做会出现什么问题 并发症 例如 SELECT FROM table WHERE id 1 正确的 vs SELECT FROM table WHERE id
  • MySql 5.7 ORDER BY 子句不在 GROUP BY 子句中并且包含非聚合列

    我试图在不禁用 my ini 中的 only full group by 的情况下弄清楚 这是我的查询 SELECT p title COUNT t qty AS total FROM payments t LEFT JOIN produc
  • db:schema:load 与 db:migrate 使用 capistrano

    我有一个 Rails 应用程序 我正在将其移动到另一台服务器 我认为我应该使用 db schema load 来创建 mysql 数据库 因为这是推荐的 我的问题是我正在使用 capistrano 进行部署 并且它似乎默认为 rake db
  • 不带 GROUP BY 的聚合查询

    这个查询似乎在我的旧机器上完美运行 但是 在我的 MySQL 5 7 14 和 PHP 5 6 25 的新机器上 它会抛出错误 致命错误 未捕获异常 PDOException 并带有消息 SQLSTATE 42000 语法错误或访问冲突 1
  • PHP 和 MySQL - 高效处理多个一对多关系

    我正在寻求一些有关使用 MySQL 和 PHP 检索和显示数据的最佳方法的建议 我有 3 个表 所有一对多关系如下 Each SCHEDULE有很多覆盖每个覆盖都有很多地点 我想检索这些数据 以便它可以全部显示在单个 PHP 页面上 例如列
  • 如果 Row1 = 值 1,则更新其他行

    我有一个小的 php 脚本 用于访问 mySql 数据库 我想在数据库中插入新记录之前查看该数字 值 1 是否等于数据库中的记录 这也在第 1 行 所以我想 查看传入的电话号码是否等于数据库中的电话号码 如果是这样 则必须保持电话号码相同的
  • MySQL 错误 1172 - 结果包含多行

    在存储过程中运行查询时 我从 MySQL 收到此错误 错误代码 1172 结果包含多行 我理解错误 我正在做一个SELECT INTO var list 因此查询需要返回单行 当我使用LIMIT 1 or SELECT DISTINCT 错
  • MySQL 排序顺序 - 排序规则?

    我在对 MySQL 中的 char 字段进行排序时遇到困难 问题是重音字符与非重音字符混淆 例如 Abc bd Acc 我认为这可能与整理有关 所以我将表格的排序规则更改为utf8 ut8 bin 看完之后这个帖子 https stacko
  • 在 jQuery AJAX 成功中从 MySql 获取特定响应

    好吧 我有这个 ajax 代码 它将在 Success 块中返回 MySql 的结果 ajax type POST url index php success function data alert data My Query sql SE
  • 在 SQL 中,如何从 SELECT * FROM ... 中排除结果?

    我知道我的标题不太具有描述性 让我在这里详细解释一下 假设一个表有 26 个字段 例如字段 a 字段 z 我只想要一个选择查询只返回 15 个字段 所以 通常 我会执行 SELECT field a field b field o FROM
  • 将庞大数据库从亚马逊RDS导出到本地mysql

    我在 Amazon RDS 上有一个 mysql 数据库 大约 600GB 数据 我需要将其移回本地专用服务器 但我不知道从哪里开始 每次我尝试初始化 sqldump 时它都会冻结 有没有办法将其移至 S3 甚至可能在开始下载之前将其分成更
  • SQL查询查找表的主键?

    我怎样才能找到哪一列首要的关键使用查询来创建表 这是重复的question https stackoverflow com questions 893874 mysql determine tables primary key dynami
  • 学说迁移后备

    我们正在使用原则迁移 当迁移包含多个操作并且其中一个操作失败时 通常会出现问题 例如 如果迁移添加了 5 个外键 其中第 5 个失败 而字段长度不同 则修复字段错误并重新生成迁移不会not修复整个问题 而现在出现一个与 4 个密钥已存在有关
  • 随机组合 MySQL 数据库中的两个单词

    我有一个包含名词和形容词的数据库 例如 id type word 1 noun apple 2 noun ball 3 adj clammy 4 noun keyboard 5 adj bloody ect 我想创建一个查询 它将抓取 10
  • mysql排序和排名语句

    我需要一些 mysql 语句的帮助 我的表 1 有 7 列 表 2 有 8 列 额外的列名为排名 我的语句应该是这样的 从表 1 中选择全部 然后按 用户数 排序 将其插入表 2 中并排名开始 1 2 3 等 table 1 usernam

随机推荐

  • 基于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