Python MySQL通过Binlog 获取变更记录 恢复数据

news/2024/11/25 14:16:56/

通过MySQL的二进制日志(Binlog)获取数据库的变更记录,并用于恢复数据,是一个相对高级的操作。这通常涉及读取Binlog中的事件,解析这些事件以了解数据变更的详细信息,然后基于这些信息来恢复或回滚数据。

在Python中,你可以使用pymysqlreplication库来读取Binlog,但请注意,这个库本身并不提供直接的数据恢复功能。它只能帮助你解析Binlog中的事件。恢复数据需要你根据这些事件编写额外的逻辑。
以下是一个使用pymysqlreplication库通过Binlog获取MySQL操作记录的示例:

  1. 安装pymysqlreplication:
    首先,你需要安装这个库。你可以使用pip来安装:
pip install pymysqlreplication
  1. 配置MySQL:
    确保你的MySQL服务器启用了Binlog,并且你有一个具有足够权限的MySQL用户来读取Binlog。
  2. 编写Python脚本:
    下面是一个简单的Python脚本,它使用pymysqlreplication.BinLogStreamReader来读取Binlog事件,并打印出插入、更新和删除操作的信息。
python">import json
import sys
from datetime import datetime
from pymysqlreplication import BinLogStreamReader
from pymysqlreplication.row_event import (DeleteRowsEvent,UpdateRowsEvent,WriteRowsEvent,
)
import pandas as pdMYSQL_SETTINGS = {'host': '127.0.0.1','port': 3306,'user': 'root','password': '123456'
}
# 要监控的数据库和表 ssc_sjzz2
database_name = 'ssc_wfg'
table_name = 't_sys_user'def default(o):if isinstance(o, datetime):return o.isoformat()raise TypeError("Unserializable object {}".format(o))
def main():stream = BinLogStreamReader(connection_settings=MYSQL_SETTINGS,server_id=6, # 必须与MySQL服务器上的其他复制客户端不同only_events=[DeleteRowsEvent, WriteRowsEvent, UpdateRowsEvent],only_tables=[table_name],only_schemas=[database_name]) df = pd.DataFrame()for binlogevent in stream:if binlogevent.table == table_name and binlogevent.schema == database_name:time = binlogevent.formatted_timestamp.replace('T', ' ')timestamp= binlogevent.timestampfor row in binlogevent.rows:event = {"schema": binlogevent.schema, "table": binlogevent.table,"time": time,"timestamp": timestamp,}if isinstance(binlogevent, DeleteRowsEvent):event["action"] = "delete"event["value"] = json.dumps(list(row["values"].items()), default=default)# event = dict(event.items() + row["values"].items())elif isinstance(binlogevent, UpdateRowsEvent):event["action"] = "update"event["value"] = json.dumps(list(row["after_values"].items()), default=default)# event = dict(event.items() + row["after_values"].items())elif isinstance(binlogevent, WriteRowsEvent):event["action"] = "insert"event["value"] = json.dumps(list(row["values"].items()), default=default)print(json.dumps(event, default=default))df = pd.concat([df, pd.DataFrame(event, index=[0])], ignore_index=True)stream.close()df.to_excel('binlog.xlsx', index=False)
if __name__ == "__main__":main()

在这个脚本中:

  • MYSQL_SETTINGS包含了连接到MySQL服务器所需的设置。
  • BinLogStreamReader 包含了读取Binlog所需的设置,包括server_id(必须是一个唯一的标识符,用于区分不同的复制客户端)和only_events(指定我们感兴趣的事件类型)。
  • stream函数根据事件的类型(删除、更新或插入)打印出相应的SQL语句。
  • main 函数设置了Binlog流读取器,并在捕获到任何异常时优雅地关闭流。
  • pandas:将结果输出到excel表格中,用于数据进行分析处理。
  1. 运行脚本:
    运行这个Python脚本,它将连接到你的MySQL服务器,并开始读取Binlog中的事件。每当有新的事件发生时(如插入、更新或删除操作),它都会打印出相应的SQL语句。

http://www.ppmy.cn/news/1549837.html

相关文章

设计模式之 命令模式

命令模式(Command Pattern)是行为型设计模式之一,它将请求(或命令)封装成一个对象,从而使用户能够将请求发送者与请求接收者解耦。通过命令模式,调用操作的对象与执行操作的对象不直接关联&…

前端工程化-node/npm/babel/polyfill/webpack 一文速通

文章主要介绍了前端工程化的相关内容,包括 Node 环境、npm 包管理器及其命令、配置和镜像,package.json 文件,babel 和 polyfill 用于解决 JavaScript 兼容性问题,以及 webpack 这一前端构建工具的作用、核心概念、构建流程、安装…

BEV:显示相机视角转换-----FastBEV/IPM与LSS

一、背景 BEV方案中,将图像视角转换到BEV视角的方法对模型性能影响较大,FastBEV的速度较快,但投影效果上限不高,LSS投影上限较高,但速度较慢 (耗时相对较高)。是否有折中的方案,在耗…

AI 在软件开发流程中的优势、挑战及应对策略

AI 在软件开发流程中的优势、挑战及应对策略 随着人工智能技术的飞速发展,AI大模型正在逐步渗透到软件开发的各个环节,从代码自动生成到智能测试,AI的应用正在重塑传统的软件开发流程。本篇文章将分析AI在软件开发流程中带来的优势&#xff0…

【Anaconda】Pycharm如何配置conda虚拟环境

一、前置准备 电脑已安装 Anaconda、Pycharm 软件;已创建需要集成到 Pycharm conda 环境; 推荐参考: Anaconda快速上手:如何下载安装与配置Anaconda 二、环境配置 1)Pycharm 打开 Settings > Project: > Pytho…

Spring模块详解Ⅴ(Spring ORM Spring Transaction)

目录 小程随笔Spring ORM 作用主要组件示例 HibernateTemplateJpaTemplate 总结优缺点 优点缺点 总结 Spring Transaction 1. 概述2. 传播行为(Propagation)3. 隔离级别 4. 回滚规则 5. 事务配置方式6. 事务管理器7. 常见的事务问题与最佳实践总结 小程…

基于Gradle搭建Spring6.2.x版本源码阅读环境

前言 阅读源码是程序猿成长的必经一环,正所谓知其然知其所以然。我们在开发成长道路上不仅需要知道如何使用,更要懂得其背后的原理,如此方可得心应手。本篇文章旨在指导大家搭建Spring6.0以上版本的源码阅读环境,方便大家在学习源…

本地部署 MaskGCT

本地部署 MaskGCT 0. 更新系统和安装依赖项1. 克隆代码2. 创建虚拟环境3. 安装依赖模块4. 运行 MaskGCT5. 访问 MaskGCT 0. 更新系统和安装依赖项 sudo apt update sudo apt install espeak-ng1. 克隆代码 git clone https://github.com/engchina/learn-maskgct.git; cd lear…