postgresql|数据库|闪回插件e-maj的部署和使用

前言:

E-Maj 是 PostgreSQL 数据库的一个扩展插件,它的全称为 "Elementary Majordomo"。这个扩展的主要功能是为数据库中的表集提供细粒度的写入日志记录和时间旅行能力。这意味着使用 E-Maj 的用户可以在数据库的特定子集上实现事务的回滚,从而达到时间点恢复的效果,这对于审计、数据恢复、数据分析等场景非常有用。

E-Maj 通过跟踪对数据库表的更改来工作,允许用户创建和管理一组表的稳定视图,这些视图可以被快照并在需要时恢复到之前的状态。它通过一种称为“快照集”的机制来实现这一点,快照集定义了哪些表应该被跟踪以及如何处理它们的变更。

一些 E-Maj 的关键特性包括:

  1. 细粒度的日志记录:只记录你指定的表的更改,而不是整个数据库。
  2. 时间旅行:能够将表状态恢复到过去的任何已保存的快照点。
  3. 并发安全:在执行时间旅行操作时不影响其他正在进行的事务。
  4. 管理工具:提供了命令行工具和 Emaj_web,一个基于 PHP 的 web 客户端,以便更方便地管理和监控 E-Maj 的操作。

E-Maj 的最新版本(截至2024年4月23日的4.4.0版本)带来了对表组和扩展版本历史记录的可视化改进,错误修复,以及对 Emaj_web 客户端的功能增强,以更好地利用这些新特性。此外,从4.2.0版本开始,E-Maj 已不再支持 PostgreSQL 11之前的版本,表明其持续跟进并适应 PostgreSQL 数据库的新发展。

🆗,本文是基于postgresql12做的部署,e-maj-web说实话不好用,基本不推荐使用,前面也说了这是一个插件,因此,安装方式采用rpm包安装,操作系统是centos7 ,x86_64架构

一、

e-maj在postgresql的社区仓库内,也就是pgdg仓库内,仓库地址是:Index of /pub/repos/yum/reporpms/EL-7-x86_64/

仓库文件rpm包下载后上传到服务器rpm安装即可,非常简单,这里就不废话了

postgresql的安装也采用的是rpm方式,仓库配置好后,执行以下命令先安装postgresql

yum install postgresql12-server postgresql12-libs postgresql12-devel postgresql12-contrib postgresql12-tcl postgresql12-odbc pgadmin4-server pgadmin4-web -y

开始安装e-maj

yum install e-maj_12-4.3.1 emaj_web-4.3.1 -y

输出如下:

Installed:e-maj_12.noarch 0:4.3.1-1PGDG.rhel7                                                                                                                                   emaj_web.noarch 0:4.3.1-1PGDG.rhel7                                                                                                                                  Dependency Installed:libsodium.x86_64 0:1.0.18-1.el7      php.x86_64 0:7.4.33-14.el7.remi      php-cli.x86_64 0:7.4.33-14.el7.remi      php-common.x86_64 0:7.4.33-14.el7.remi      php-json.x86_64 0:7.4.33-14.el7.remi      php-pdo.x86_64 0:7.4.33-14.el7.remi      php-pgsql.x86_64 0:7.4.33-14.el7.remi      php-sodium.x86_64 0:7.4.33-14.el7.remi     Complete!

可以看到,主要依赖的是php7.4,如果不安装emajweb将会非常简单

ema插件安装在表所在的数据库内,例如,我有三张表,在名为test的数据库,那么,需要先切换到test数据库,然后在安装emaj插件

二、

emaj插件激活

需要创建一个新的数据库和新的schema ,这里名字都叫test,登陆命令行,执行以下SQL语句:

create database test;
\c test
create schema test;

安装emaj这个插件:

此插件依赖dblink,btree_gist和adminpack,并且需要开启两阶段提交,也就是数据库主配置文件内的max_prepared_transactions需要设定一个非零值

  • 如果你打算使用两阶段提交,并且预计会有大量的并发两阶段事务,你可以从一个较高的值(如 50 或 100)开始,并根据需要进行调整。
  • 如果你的系统资源有限,或者你不打算频繁使用两阶段提交,可以考虑设置一个较低的值,如 10 或 20。
  • 我这里因为是实验性质,因此,使用的是20,修改此参数完毕后,重启数据库

进入数据库命令行模式,执行以下SQL命令:

CREATE EXTENSION adminpack;
CREATE EXTENSION IF NOT EXISTS emaj CASCADE;

输出如下:

test=# CREATE EXTENSION IF NOT EXISTS emaj CASCADE;
NOTICE:  extension "emaj" already exists, skipping
CREATE EXTENSION

此时查看emaj相关表和函数,可以看到在postgres这个数据库下的emaj这个schema内:

🆗,emaj插件激活完毕,这个插件不需要写在postgresql数据库的主配置文件内

删除插件

删除emaj插件不能使用drop extension,因为本次使用的是4.3版本,因此,需要使用删除脚本,4.4最新版本是使用函数删除插件

脚本路径如下

postgres=# \i /usr/pgsql-12/share/extension/emaj_uninstall.sql
>>> Starting the E-Maj uninstallation procedure...
psql:/usr/pgsql-12/share/extension/emaj_uninstall.sql:238: WARNING:  emaj_uninstall: emaj_adm and emaj_viewer roles have been dropped.
>>> E-maj successfully uninstalled from this database

二、

emaj插件的使用

首先,需要明确几个概念,这些概念是emaj独有的,第一个是表组,也就是有哪些表你需要纳入emaj的管理,可以以schema为范围,也就是一个schema下的所有表都纳入emaj管理,第二个是mark,也可以理解为标记点,第三个是快照点

emaj的官方文档地址是:Welcome to the E-Maj’s documentation! — E-Maj 4.4.0 documentation

emaj大体的流程是                       创建表组--->表组内加入表--->启动表组--->---->创建标记mark---->回滚到指定标记--->停止表组

1、

创建表组

SELECT emaj.emaj_create_group('my_group', true);

2、

表组内添加表

The tables group can now be populated with tables and sequences, using statements like:

SELECT emaj.emaj_assign_table('my_schema', 'my_table', 'my_group');

to add a table into the group, or, to add all tables and sequences of a given schema:

SELECT emaj.emaj_assign_tables('my_schema', '.*', '', 'my_group');SELECT emaj.emaj_assign_sequences('my_schema', '.*', '', 'my_group')

//以上是官网的,仿照官网,现在有三个表在test数据库下的test  schema内,该schema只有这三个表,因此,第一个参数是schema名称,第二个参数表示所有表,第三个参数空缺,第四个参数是表组名称

SELECT emaj.emaj_assign_tables('test', '.*', '', 'my_group');

3、

查看表组状态,

可以看到现在还没有开始记录表更改

4、

查看表组详细信息

5、

启动表组,

开始记录三个表的更改,第一个参数是表组名称,第二个参数是初始化的记录点名称,可以自己随意定义,这个表组只能启动一次,第二次就报错了

SELECT emaj.emaj_start_group('my_group', '20240526');

 

6、

看看group表,

是否开始记录

7、

表组内标记 mark

SELECT emaj.emaj_set_mark_group('my_group', 'Mid_Point');

 8、

修改emp表后查看日志记录表,日志记录表存放在emaj+表所在schema这样的形式新创建的schema里面了,可以看到修改了两个列的值,新旧都写在这个日志表里了

9、

根据mark点 恢复表组内管理的表,

回滚之后,上面的日志表的内容就清空了,也就是时间回溯,只能回放,不能朝前放

SELECT emaj.emaj_rollback_group('my_group', 'Mid_Point');

 

10、

停止emaj日志记录

SELECT emaj.emaj_stop_group('my_group', '20240527');

 

停止后,数据库的任何对以上三表的操作都不记录了,也就没有回溯功能了 

多表组管理还没搞清楚,以后在说吧!!!!emaj-web功能比较弱,暂时也不说了!!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/16329.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++笔记之Unix时间戳、UTC、TSN、系统时间戳、时区转换、local时间笔记

C++笔记之Unix时间戳、UTC、TSN、系统时间戳、时区转换、local时间笔记 ——2024-05-26 夜 code review! 参考博文 C++笔记之获取当前本地时间以及utc时间

Linux定时计划

定时计划 一、计划任务种类 突发性:临时决定只执行一次的任务 at:处理执行一次任务就结束定时性:每隔一定时间需要重复执行此命令 crontab:指定任务,按照设定的周期一直循环执行二、作用 定时任务可以用于自动备份…

TCP/IP协议(一)

一.报文和协议 协议有什么作用?协议定义通信实体间所交换报文的格式和次序,以及在报文发送和/或接收或者其他事件方面所采取的行动(响应)。 什么是报文?指在网络中传输的数据单元,网络通讯的基本单位。(HTTP报文、TCP报…

链式二叉树的前,中,后序遍历 AND 结点个数及高度等 文末附带全部代码

目录 前言1. 前序遍历2. 中序遍历3. 后续遍历4. 二叉树结点的个数5. 二叉树叶子结点个数6. 二叉树的高度7. 二叉树第K层结点的个数8. 二叉树查找值为x的结点全部代码总结 正文开始 前言 本文旨在介绍二叉树的链式存储中一些函数的实现 博客主页: 酷酷学!!! 更多文章, 期待关…

01主动安全系统

“安全”一直是车主对车辆考核的重要指标。车辆安全可以分为从主动安全和被动安全两个方面进行分类。今天就来说说汽车主动安全系统的那些事儿。 01.什么是主动安全系统? 主动安全是指尽量自如地操纵控制汽车的安全系统措施。无论是直线上的制动与加速还是左右打方…

【调试笔记-20240526-Linux-在 OpenWrt-23.05 发行版上安装 cloudreve】

调试笔记-系列文章目录 调试笔记-20240526-Linux-在 OpenWrt-23.05 发行版上安装 cloudreve 文章目录 调试笔记-系列文章目录调试笔记-20240526-Linux-在 OpenWrt-23.05 发行版上安装 cloudreve 前言一、调试环境操作系统:Windows 10 专业版调试环境调试目标 二、调…

RTOS(3)极简ARM架构与汇编

1.掌握八条汇编指令即可 读内存loadLDR R0,[addrA]写内存storeSTR R0,[addrA]加ADD R0,R1,R2减SUB R0,R1,R2比较CMP R0,R1跳转B / BL入栈PUSH { R3,LR }出…

网络原理-以太网协议和DNS协议

一、以太网协议 以太网协议会涉及到数据链路层和物理层。 如图: 这里面的目的地址和源地址指的并不是IP地址,而是MAC地址(物理地址)。长度为6个字节。即最多能表示2^48 个地址,也是非常大的,足够给全球每个设备都分配一个地址,因此在网卡出厂的时候都会带有一个唯…

力扣刷题--2176. 统计数组中相等且可以被整除的数对【简单】

题目描述 给你一个下标从 0 开始长度为 n 的整数数组 nums 和一个整数 k &#xff0c;请你返回满足 0 < i < j < n &#xff0c;nums[i] nums[j] 且 (i * j) 能被 k 整除的数对 (i, j) 的 数目 。 示例 1&#xff1a; 输入&#xff1a;nums [3,1,2,2,2,1,3], k …

# linux 系统 没有 ifconfig 命令,提示: ifconfig: command not found

sudo ip route add default via 192.168.1.1 dev eth0# linux 系统 没有 ifconfig 命令&#xff0c;提示&#xff1a; ifconfig: command not found 一、问题描述&#xff1a; 有些伙伴在学习 linux 系统时&#xff0c;在 使用 ifconfig 命令 查询 系统 IP 出现 ifconfig: co…

06中间件RTOS/CP

Autosar CP 操作系统详解-CSDN博客 1. 什么是RTOS &#xff1f; RTOS&#xff0c;英文全称是 Real-time Operation System&#xff0c;中文就是 实时操作系统&#xff0c;又称及时操作系统。 实时操作系统&#xff0c;是指当外界事件或数据产生时&#xff0c;能够接受并以足…

中国人工智能大模型价格战

近年来&#xff0c;人工智能技术迅猛发展&#xff0c;尤其是大模型领域的突破让人们看到了更多的可能性。然而&#xff0c;在这一高科技领域&#xff0c;中美两国的竞争日趋激烈。近日&#xff0c;中国互联网巨头们纷纷启动大模型价格战&#xff0c;引发了广泛关注。这场价格战…

怎么在Qt Designer设计的界面上显示Matplotlib的绘图?

首先&#xff0c;利用Qt Designer设计界面。 设计好后保存为ui文件。 接着&#xff0c;将ui文件转为py文件。 我喜欢在python中进行转换&#xff0c;因此把转换命令封装为函数&#xff0c;运行一下即可。 import os # pyuic5 -o output_file.py input_file.ui #通过命令把.ui…

【云原生】Kubernetes-----POD资源限制与探针机制

目录 引言 一、资源限制 &#xff08;一&#xff09;基本定义 &#xff08;二&#xff09;资源单位 1.CPU资源 2.内存资源 &#xff08;三&#xff09;请求与限制 &#xff08;四&#xff09;定义方式 1.编写yaml文件 2.查看资源情况 二、Pod探针机制 &#xff08;…

动态规划之背包问题中如何确定遍历顺序的问题-组合or排列?

关于如何确定遍历顺序 322. 零钱兑换中&#xff0c;本题求钱币最小个数&#xff0c;那么钱币有顺序和没有顺序都可以&#xff0c;都不影响钱币的最小个数。 所以本题并不强调集合是组合还是排列。 如果求组合数就是外层for循环遍历物品&#xff0c;内层for遍历背包。 如果求…

UML建模

一、概述 二、类图 三、用例图 四、顺序图 五、活动图 六、状态图 七、通信图 八、构件图

学 C/C++ 具体能干什么?

学习 C 和 C 后&#xff0c;你可以从事许多不同的工作和项目&#xff0c;这两种语言以其高性能和低级控制而闻名&#xff0c;特别适合以下几个领域&#xff1a; 1. 系统编程 C 和 C 是系统编程的首选语言&#xff0c;适用于操作系统、驱动程序和嵌入式系统开发。 操作系统开发…

MySQL--InnoDB体系结构

目录 一、物理存储结构 二、表空间 1.数据表空间介绍 2.数据表空间迁移 3.共享表空间 4.临时表空间 5.undo表空间 三、InnoDB内存结构 1.innodb_buffer_pool 2.innodb_log_buffer 四、InnoDB 8.0结构图例 五、InnoDB重要参数 1.redo log刷新磁盘策略 2.刷盘方式&…

明星IP切片带货爆单营,0基础搞定IP切片带货短视频(69节课)

把握带货趋势&#xff0c;了解切片流程&#xff0c;剪辑带货创收营 课程目录&#xff1a; 01第一章实操链路-第一节IP选择.mp4 02第一章实操链路-第二节账号准备.mp4 03第一章实操链路-第四节开通权限.mp4 04第一章实操链路-第五节货品准备.mp4 05第一章实操链路-第六节素…

一、Servlet和JSP技术概述

注&#xff1a;该系列笔记是用于我在 《Servlet 与 JSP 核心编程》这本书中的学习笔记&#xff0c;无其他意思&#xff0c;侵权请联系2082045221qq.com删除。 ​ 第一章内容较少&#xff0c;所以暂时有用的笔记也不多。 1.1、Servlet 的功用&#xff1a; ​ Servlet 是运行在…