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

news2024/12/23 10:39:51

前言:

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.coloradmin.cn/o/1698434.html

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

相关文章

python列表元素的增减之道:删除篇

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、前言 二、删除元素的基本方法 1. 使用remove()方法 2. 使用pop()方法 3. 使用del语句…

mars3d的V2版本的Video2D与V3版本的Video2D实现数据快速迁移

场景: 目前是v2和v3的两个相机视角的不同格式,在Mars3d的V2的旧数据想可以快速迁移到V3版本。 V2版本的数据: {"camera": {"fov": 1.0471975511965976,"dis": 20,"stRotation": 0,"showFrust…

第 33 次CCF认证

1. 词频统计 题目描述 样例输入 代码 #include <bits/stdc.h>using namespace std;int main() {int n,m;cin>>n>>m;vector<int> ans1(m,0),ans2(m,0);while (n --) {int t;cin>>t;vector<int> vis(m1,0);for (int i 1;i < t;i ) {i…

这样的直男程序员,活该你单身一万年!

#分享下相亲时遇到过哪些奇葩现象# 这样的直男程序员&#xff0c;活该你单身一万年&#xff01; 在丛丛脱单小程序上相亲&#xff0c;遇到一个程序员妹纸&#xff0c;于是有了如下的真实故事&#xff1a; 妹子说她是程序员来着&#xff0c;想着我也是程序员&#xff0c;就想交…

【HMGD】STM32/GD32 CAN通信

各种通信协议速度分析 协议最高速度(btis/s)I2C400KCAN1MCAN-FD5M48510MSPI36M CAN协议图和通信帧 CubeMX CAN配置说明 CAN通信波特率 APB1频率 / 分频系数 /&#xff08;BS1 BS2 同步通信段&#xff09;* 1000 ​ 42 / 1 / (111) * 1000 ​ 14,000 KHz ​ 1400000…

1.4 Mac 电脑 Clion 安装教程

目录 1 安装 2 激活 3 汉化 1 安装 去 https://www.jetbrains.com/clion/download/other.html 下载: 也可以直接到链接进行下载:https

DOS学习-目录与文件应用操作经典案例-comp

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一.前言 二.使用 三.案例 案例 1: 基本比较 案例 2: 十进制显示差异 案例 3: 字符形式显…

1-Django开端--学生管理系统

目录 项目结构 前端页面: add_data.html class_data.html index.html apps.py models.py views.py settings,py urls.py ...实现简略的身架... 项目结构 前端页面: add_data.html --添加数据. {% extends index/index.html %}{% block content %} <div class&qu…

基于机器学习的一线城市租房价格预测分析与实现,实现三种算法预测

本文旨在基于机器学习方法&#xff0c;对一线城市租房价格进行预测分析&#xff0c;并使用Matplotlib可视化、随机森林、一元线性回归和多元线性模型进行模型对比。通过爬取北京链家二手房数据作为研究对象&#xff0c;探讨了租房价格与各种因素之间的关系&#xff0c;阐述了研…

实时计算及异构计算随笔笔记

3、异构计算的典型应用 异构计算并不神秘&#xff0c;目前已渗透各个领域&#xff0c;不仅是PC领域&#xff0c;也包括了手持移动设备领域、行业领域&#xff0c;甚至是云计算、分布式计算领域。事实上&#xff0c;异构计算至少在应用端&#xff08;前台&#xff09;并不像它的…

【java程序设计期末复习】chapter4 类和对象

类和对象 编程语言的几个发展阶段 &#xff08;1&#xff09;面向机器语言 计算机处理信息的早期语言是所谓的机器语言&#xff0c;使用机器语言进行程序设计需要面向机器来编写代码&#xff0c;即需要针对不同的机器编写诸如0101 1100这样的指令序列。 &#xff08;2&#x…

【XSS CSRF 】访问时篡改密码——以DVWA-High为例

【XSS & CSRF 】泄露cookie——以DVWA-High为例-CSDN博客第一阶段 目录 前言 一、场景想定 二、过程步骤 1.High等级下的CSRF利用 2.XSSCSRF实现页面访问后密码被修改 三、最终利用——cookie可变下的admin密码修改 1.cookie可变 2.利用过程 总结 前言 第二阶段…

编写子函数+最大公约数和最小公倍数

目录 计算级数和 判断并找出非素数 主函数操作流程 求最大公约数和最小公倍数 编写子函数&#xff0c;该函数的功能是是计算下列级数和&#xff0c;并将和值返回主调函数输出。数据由主函数输入。 fun 函数 sum 函数 main 函数 注意事项 编写函数&#xff0c;该函数的…

C语言——malloc和free用法和常见误区

最近写了个关于动态数组的代码&#xff0c;遇到了一个大坑&#xff0c;特此记录 先说结论&#xff1a; 1.利用malloc创建堆空间&#xff0c;大小最好设置大一点&#xff0c;不然后面存进去的值需要的空间过大会导致各种的堆、指针问题 2.只能使用realloc对已经创建的空间进行修…

自定义类型:结构体详解

1.结构体 1.1 结构的基础知识 结构是一些值的集合&#xff0c;这些值称为成员变量。一个整型数组&#xff0c;它的每个数组元素只能是整型&#xff0c;字符型的数组它的每个元素只能是字符型。但是结构体的每个成员可以是各种不同类型的变量。 1.2结构的声明 //声明 struct t…

视频拼接融合产品的产品与架构设计(四)分布式GPU运算合并单元

上一篇如下 视频拼接融合产品的产品与架构设计(三&#xff09;内存和显存单元数据迁移 视频合并单元说明 对下面这张图做些说明&#xff0c;视频接入是比较常见&#xff0c;可以说是普通&#xff0c;但是做到接入后随即进行比较重的算法运算&#xff0c;这个在视频领域并不多…

海外抖音TK自动挂机,手机全自动挂机,每天轻松搞2张

海外抖音TK自动挂机&#xff0c;手机全自动挂机&#xff0c;每天轻松搞2张 课程获取方式&#xff1a; https://zzmbk.com/

linux系统部署Oracle11g:netca成功启动后1521端口未能启动问题

一、问题描述 执行netca命令&#xff0c;进入图形化界面&#xff0c;进行Oracle端口监听设置 #终端输入命令 netca 最终提示设置成功&#xff1a; 但是我们进行下一步“创建数据库”的时候会报错&#xff0c;说数据库端口1521未开启&#xff01; 二、问题处理 使用命令查看开…

ubuntu安装samba实现共享文件windows可查看ubuntu中的文件

samba的作用&#xff1a;实现共享linux/ubuntu系统中的文件&#xff0c;在windows直接查看操作ubuntu/linux中的文件、文件夹 1、安装samba sudo apt-get install samba如果不能安装samba&#xff0c;则更新apt-get sudo apt-get upgrade sudo apt-get update sudo apt-get d…

数据库攻防之MySQL

MySQL 是最流行的关系型数据库&#xff0c;与此同时也是 web 应用中最好的关系型数据库管理应用软件。我们在渗透过程中碰到的 PHP 站点大部分都会搭配 MySQL 数据库&#xff0c;因此它是红队攻防中最常遇到的数据库。 0x01 MySQL简介 MySQL 是典型的关系型数据库&#xff0c;…