用OceanBase binlog service 轻松进行数据回滚

背景

在日常的数据库运维过程中,难免会遭遇数据误操作的情形,比如因疏忽而执行了非预期的delete或update操作,这时就需要进行数据回滚。如果在OceanBase中启用了回收站功能,并设置了合适的undo_retention,那么我们可以利用闪回查询这一功能来实现数据的快速恢复。对此感兴趣的朋友,可以前往平台进一步了解:闪回查询  。不幸的是,回收站是默认处于关闭状态的,一旦开启,数据盘的使用量也会相应增加。对于熟悉MySQL的用户来说,都知道存在一个binlog文件,这个文件可以通过各种开源工具来生成回滚的sql,OceanBase binlog service已经发布了一段时间,在2023年12月底,obd v250也开始支持部署oblogproxy(其中一种模式即binlog service)。本文将通过部署oblogproxy,并结合mysql工具来测试数据回滚操作。对于感兴趣的同学,也可以进一步测试MyFlash在回滚恢复数据方面的支持情况。

部署 oblogproxy

1、obd 版本不低于 2.5.0。

2、拷贝 oblogproxy 配置文件模版

安装obd后,配置文件模版在/usr/obd/example,可以按需拷贝,本次部署的是 oblogproxy 组件 且测试环境有ocp (提供了config server 服务),如果我们使用的环境没有ocp,需要拷贝 distributed-with-obproxy-and-oblogproxy-example.yaml 文件,这里以 oblogproxy-only-example.yaml 为例:

3、编辑oblogproxy-only-example.yaml配置文件

user:username: adminkey_file: /home/admin/.ssh/id_rsa
oblogproxy:servers:- 172.24.255.96version: 2.0.0global:: /home/admin/oblogproxyservice_port: 2983ob_sys_username: "binlog_user"ob_sys_password: "aaAA11__"#binlog_dir: /root/oblogproxy/run#binlog_mode: true  # enable binlog mode, default true

4、部署和启动oblogproxy

 obd cluster deploy oblogproxy -c oblogproxy-only-example.yaml -vobd cluster start oblogproxy -v

5、创建用户并授权

在要创建 binlog 服务所在集群的sys租户下为 obd 配置的 ob_sys_username 创建账密并授权 oceanbase 库读权限。

 create user binlog_user identified by 'aaAA11__';grant select on oceanbase.* to binlog_user;

6、在 obproxy 中配置 oblogproxy 服务地址

alter proxyconfig set enable_binlog_service='True';
alter proxyconfig set binlog_service_ip='172.24.255.96:2983';
alter proxyconfig set init_sql='set _show_ddl_in_compat_mode = 1;';

7、创建 binlog 服务

mysql -h172.24.255.96 -P 2983
CREATE BINLOG  FOR TENANT obtest.test1 WITH CLUSTER URL 
'http://172.24.255.96:8080/services?Action=ObRootServiceInfo&User_ID=alibaba&UID=ocpmaster&ObRegion=obtest';

步骤6、7中相关的命令和参数说明详见:

OceanBase分布式数据库-海量数据 笔笔算数

8、确认 binlog 服务是否正常

在创建 binlog 服务所在的用户租户下 执行:

mysql -h172.24.255.93 -P2883 -uroot@test1#obtest -pxxx -A -cMySQL [(none)]> show master status;
+------------------+----------+--------------+------------------+------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                        |
+------------------+----------+--------------+------------------+------------------------------------------+
| mysql-bin.000001 |     1158 |              |                  | 013e0324-9fc6-11ee-8dfd-00163e0383a5:1-4 |
+------------------+----------+--------------+------------------+------------------------------------------+
1 row in set (0.24 sec)

在obd 配置文件的 home_path/run 目录下会生成第7步创建binlog service对应的集群名的目录结构,在 run/{集群名}/{租户名}/data 目录下确认生成了我们熟悉的 binlog 文件。

tree -L 2 run/obtest
run/obtest
└── test1├── binlog_converter.conf├── data├── etc├── log├── run└── storage6 directories, 1 file[root@172.24.255.96 data]$pwd
/home/admin/oblogproxy/run/obtest/test1/data
[root@172.24.255.96 data]$
[root@172.24.255.96 data]$ls -lrt
总用量 8
-rw-rw-r-- 1 admin admin    0 1月   3 14:50 index.LOCK
-rw-rw-r-- 1 admin admin  116 1月   3 15:01 mysql-bin.index
-rw-rw-r-- 1 admin admin 1158 1月   3 15:01 mysql-bin.000001
[root@172.24.255.96 data]$

模拟数据

在 test1 租户下

create table t1(id int primary key,name varchar(20));
insert into t1 values(1,'a'),(2,'b'),(3,'c');
update t1 set name='aaa' where id=1;

使用 my2sql 工具

my2sql 工具的说明: GitHub - liuhr/my2sql: 解析MySQL binlog ,可以生成原始SQL、回滚SQL、去除主键的INSERT SQL等,也可以生成DML统计信息以及大事务分析信息。  

git clone https://github.com/liuhr/my2sql.git执行后会在当前目录下生成一个 my2sql 目录[root@172.24.255.96 ~]$cd my2sql/
[root@172.24.255.96 my2sql]$ls -lrt
总用量 80
-rw-r--r-- 1 root root  9662 1月   3 14:55 README.md
-rw-r--r-- 1 root root  1046 1月   3 14:55 LICENSE
drwxr-xr-x 3 root root  4096 1月   3 14:55 misc
-rw-r--r-- 1 root root  1221 1月   3 14:55 main.go
-rw-r--r-- 1 root root 12300 1月   3 14:55 go.sum
-rw-r--r-- 1 root root   838 1月   3 14:55 go.mod
drwxr-xr-x 2 root root  4096 1月   3 14:55 ehand
drwxr-xr-x 2 root root  4096 1月   3 14:55 dsql
drwxr-xr-x 2 root root  4096 1月   3 14:55 constvar
drwxr-xr-x 2 root root  4096 1月   3 14:55 base
drwxr-xr-x 3 root root  4096 1月   3 14:55 releases
drwxr-xr-x 2 root root  4096 1月   3 14:55 toolkits
drwxr-xr-x 2 root root  4096 1月   3 14:55 sqltypes
drwxr-xr-x 2 root root  4096 1月   3 14:55 sqlbuilder
drwxr-xr-x 4 root root  4096 1月   3 14:55 vendor
[root@172.24.255.96 my2sql]$cd releases/
[root@172.24.255.96 releases]$ls -lrt
总用量 4
drwxr-xr-x 2 root root 4096 1月   3 14:55 centOS_release_7.x
[root@172.24.255.96 releases]$cd centOS_release_7.x/
[root@172.24.255.96 centOS_release_7.x]$ll
总用量 7744
-rw-r--r-- 1 root root     107 1月   3 14:55 biglong_trx.txt
-rw-r--r-- 1 root root     144 1月   3 14:55 binlog_status.txt
-rwxr-xr-x 1 root root 7919430 1月   3 14:55 my2sql
[root@172.24.255.96 centOS_release_7.x]$pwd
/root/my2sql/releases/centOS_release_7.x

my2sql 查看原始sql

/root/my2sql/releases/centOS_release_7.x/my2sql \
-user root@test1#obtest -password xxx -host 172.24.255.93  -port 2883 \
-mode file -local-binlog-file /home/admin/oblogproxy/run/obtest/test1/data/mysql-bin.000001 \
-work-type 2sql  -start-file /home/admin/oblogproxy/run/obtest/test1/data/mysql-bin.000001 \
-start-datetime "2024-01-03 14:00:00" -stop-datetime "2024-01-03 16:00:00" \
-output-dir /tmp/test

1704274232

1704274337

my2sql 查看回滚sql

/root/my2sql/releases/centOS_release_7.x/my2sql \
-user root@test1#obtest -password xxx -host 172.24.255.93  -port 2883 \
-mode file -local-binlog-file /home/admin/oblogproxy/run/obtest/test1/data/mysql-bin.000001 \
-work-type rollback  -start-file /home/admin/oblogproxy/run/obtest/test1/data/mysql-bin.000001 \
-start-datetime "2024-01-03 14:00:00" -stop-datetime "2024-01-03 16:00:00" \
-output-dir /tmp/test2

1704274292

1704274382

找业务评估回滚的sql,确认没有问题后执行即可实现数据误操作后回滚。

通过上面的测试,我们可以看到 oceanbase binlog service 产生的 binlog 文件的兼容性,通过开源工具 my2sql 可以正常解析。用到的命令比较粗糙没有加过滤条件,实际在使用中可以按需根据 database_name,table_name 等条件进行过滤,使得生成的sql更加符合我们的预期。

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

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

相关文章

jmx_prometheus_javaagent-0.19.0.jar+Prometheus+Grafana 监控Tongweb嵌入式(by lqw)

文章目录 1.思路2.部署准备3.应用jar包修改配置和导入tw嵌入式的依赖(参考)4.Prometheus部署5.Prometheus配置6.安装和配置Grafana 1.思路 Tongweb嵌入式最终是把依赖打入到java应用(也就是jar包里),然后启动jar包进行…

单片机LED灯闪烁

延时函数计算&#xff08;相关代码生成&#xff09;&#xff1a; #include "reg52.h" #include <INTRINS.H> void Delay500ms() //11.0592MHz {unsigned char i, j, k;_nop_();_nop_();i 22;j 3;k 227;do{do{while (--k);} while (--j);} while (--i); }vo…

让扣你代码的人电脑关机-js反爬

文案 让扣你代码的人电脑关机&#xff0c;赶紧学起来。众所周知。浏览器中无法导入模块&#xff0c;会报错。nodejs中可以导入模块。那么我们可以在导入语句后加入整蛊代码。在捕获异常后执行正常的代码。那么代码在浏览器中就会正常执行&#xff0c;而当你在本地环境中执行的…

Docker常用命令!!!

一、docker基础命令 1、启动docker systemctl start docker 2、关闭docker systemctl stop docker 3、重启docker systemctl restart docker 4、docker设置随服务启动而自启动 systemctl enable docker 5、查看docker 运行状态 systemctl status docker 6、查看docker 版本号信…

Microsoft Edge浏览器Internal Server Error问题解决

网页无法在Microsoft Edge浏览器&#xff0c;尝试Google浏览器可以&#xff0c;排除服务器问题&#xff0c;应该是浏览器本身的问题。 一般这种都是和cookie有关&#xff0c;尝试删除记录 解决&#xff01;

【MQTT】Vue中使用mqtt

MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;作为一种轻量级、开放、灵活、简单、易于实现的通信协议。它基于发布/订阅&#xff08;Publish/Subscribe&#xff09;模式的消息传输协议&#xff0c;在上位机和硬件设备间通信时经常用到。虽然在嵌入式软件一…

【图解物联网】第4章 先进的感测技术

4.1 逐步扩张的传感器世界 在前面的章节中&#xff0c;传感器的概念是“用来获取温度和湿度等纯数据的电子零件”。温度传感器和加速度传感器等确实是用来获取简单数据的小零件&#xff0c;我们可以将其理解为构成智能手机等电子设备的一个要素。 然而&#xff0c;随…

分布式文件存储与数据缓存(二)| Redis

目录 Redis概述_什么是NoSQLNoSQL的四大分类KV型NoSql&#xff08;代表----Redis&#xff09;列式NoSql&#xff08;代表----HBase&#xff09;文档型NoSql&#xff08;代表----MongoDB&#xff09;搜索型NoSql&#xff08;代表----ElasticSearch&#xff09; 关系型数据库和非…

Aspose.PDF功能演示:在 JavaScript 中优化 PDF 文件

PDF 文件是一种普遍存在的文档共享格式&#xff0c;但它们有时可能会很大&#xff0c;导致加载时间变慢并增加存储要求。优化 PDF 文件对于确保无缝的用户体验至关重要&#xff0c;尤其是在 Web 应用程序中。因此&#xff0c;在这篇博文中&#xff0c;我们将探讨如何使用 JavaS…

NCV4266ST50T3G线性稳压器芯片中文资料规格书PDF数据手册引脚图参数图片价格

产品概述&#xff1a; NCV4266 是一款集成了 150 mA 输出电流的低漏稳压器系列&#xff0c;可用于严酷汽车环境。它包括了较宽的运行温度范围和输出电压范围。该器件提供 3.3 V、5.0 V 固定电压版本&#xff0c;以及可调电压版本&#xff0c;输出电压准确度为 2%。它具有较高的…

IDEA 下载依赖包源码报错 Cannot download sources Sources not found for:XXX

最近在做一个功能的时候想看一个库的源码&#xff0c;结果源码下不下来&#xff0c;报Cannot download sources Sources not found for:XXX,网上搜了半天&#xff0c;也找不到靠谱的结论 后来想了下&#xff0c;应该是镜像那边出了问题&#xff0c;把镜像一删&#xff0c;源码…

HTML静态网页成品作业(HTML+CSS)——非遗徽州木雕网页(6个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有6个页面。 二、作品演示 三、代…

Linux nginx 域名申请证书后无法使用(无法访问此网站)阿里云域名

首先我们一步排除 1、域名备案是否成功&#xff1f; 网站备案_ICP备案_备案迁移_备案-阿里云 2、域名是否解析&#xff08;我就是错在这里&#xff09; 阿里云登录 - 欢迎登录阿里云&#xff0c;安全稳定的云计算服务平台 3、是否申请证书成功&#xff1f; 4、nginx是否支持…

【云原生 • Kubernetes】认识 k8s、k8s 架构、核心实战

文章目录 Kubernetes基础概念1. 是什么2. 架构2.1 工作方式2.2 组件架构 3. k8s组件创建集群步骤一 基础环境步骤二 安装kubelet、kubeadm、kubectl步骤三 主节点使用kubeadm引导集群步骤四 副节点加入主节点步骤五 部署dashboard Kubernetes核心实战1. 资源创建方式2. Namespa…

Beamer模板——基于LaTeX制作学术PPT

Beamer模板——基于LaTeX制作学术PPT 介绍Beamer的基本使用安装和编译用于学术汇报的模板项目代码模板效果图 Beamer的高级特性动态效果分栏布局定理环境 介绍 在学术领域&#xff0c;演示文稿是展示和讨论研究成果的重要方式。传统的PowerPoint虽然方便&#xff0c;但在处理复…

python爬虫之爬虫入门

import requests rrequests.get("http://www.baidu.com") print(r.status_code)#用status_code来确定页面状态是否正常 type(r) r.headers requests库入门 status_code可以用来检验网页状态是否正常type(r)返回r的类型r.headers返回该页面头部信 运行结果如下&#x…

SQLiteC/C++接口详细介绍sqlite3_stmt类(二)

返回目录&#xff1a;SQLite—免费开源数据库系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍sqlite3_stmt类简介 下一篇&#xff1a;SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;三&#xff09; sqlite3_reset() 功能&#xff1a;重置一个准备好执行的SQL语…

跨越时空的纽带:探索Facebook如何连接人与人

引言 Facebook作为全球最大的社交媒体平台之一&#xff0c;已经成为了人们日常生活中不可或缺的一部分。它不仅仅是一个社交网络&#xff0c;更是连接人与人、人与世界的纽带。在这篇文章中&#xff0c;我们将深入探讨Facebook如何跨越时空&#xff0c;连接人与人之间的关系&a…

Idea 不能创建JDK1.8的spring boot项目

由于https://start.springboot.io/ 不支持JDK1.8&#xff0c;那么我们需要换idea的springboot创建源&#xff0c;需要换成 https://start.aliyun.com&#xff0c;这也是网上大部分教程说的&#xff0c;但是我这边会报这样的错误&#xff1a; Initialization failed for https:…

Linux/Monitored

Enumeration nmap 用 nmap 扫描了常见的端口&#xff0c;发现对外开放了 22,80,389,443,5667 端口&#xff0c;端口详细信息如下 ┌──(kali㉿kali)-[~/vegetable/HTB/Monitored] └─$ nmap -sC -sV -p 22,80,389,443,5667 10.10.11.248 Starting Nmap 7.93 ( https://nm…