最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python MySQL如何通過Binlog獲取變更記錄恢復(fù)數(shù)據(jù)

 更新時(shí)間:2025年01月22日 14:50:47   作者:王小工  
本文介紹了如何使用Python和pymysqlreplication庫通過MySQL的二進(jìn)制日志(Binlog)獲取數(shù)據(jù)庫的變更記錄,并展示了一個(gè)簡(jiǎn)單的Python腳本,該腳本讀取Binlog事件并打印出插入、更新和刪除操作的SQL語句,此外,還提到可以使用pandas將結(jié)果輸出到Excel表格中進(jìn)行數(shù)據(jù)分析處理

Python MySQL通過Binlog獲取變更記錄恢復(fù)數(shù)據(jù)

通過MySQL的二進(jìn)制日志(Binlog)獲取數(shù)據(jù)庫的變更記錄,并用于恢復(fù)數(shù)據(jù),是一個(gè)相對(duì)高級(jí)的操作。

這通常涉及讀取Binlog中的事件,解析這些事件以了解數(shù)據(jù)變更的詳細(xì)信息,然后基于這些信息來恢復(fù)或回滾數(shù)據(jù)。

在Python中,你可以使用pymysqlreplication庫來讀取Binlog,但請(qǐng)注意,這個(gè)庫本身并不提供直接的數(shù)據(jù)恢復(fù)功能。它只能幫助你解析Binlog中的事件?;謴?fù)數(shù)據(jù)需要你根據(jù)這些事件編寫額外的邏輯。

以下是一個(gè)使用pymysqlreplication庫通過Binlog獲取MySQL操作記錄的示例:

1.安裝pymysqlreplication

首先,你需要安裝這個(gè)庫。你可以使用pip來安裝:

pip install pymysqlreplication

2.配置MySQL

確保你的MySQL服務(wù)器啟用了Binlog,并且你有一個(gè)具有足夠權(quán)限的MySQL用戶來讀取Binlog。

3.編寫Python腳本

下面是一個(gè)簡(jiǎn)單的Python腳本,它使用pymysqlreplication.BinLogStreamReader來讀取Binlog事件,并打印出插入、更新和刪除操作的信息。

import json
import sys
from datetime import datetime
from pymysqlreplication import BinLogStreamReader
from pymysqlreplication.row_event import (
    DeleteRowsEvent,
    UpdateRowsEvent,
    WriteRowsEvent,
)
import pandas as pd

MYSQL_SETTINGS = {
    'host': '127.0.0.1',
    'port': 3306,
    'user': 'root',
    'password': '123456'
}
# 要監(jiān)控的數(shù)據(jù)庫和表 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服務(wù)器上的其他復(fù)制客戶端不同
        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.timestamp
            for 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()

在這個(gè)腳本中:

  • MYSQL_SETTINGS包含了連接到MySQL服務(wù)器所需的設(shè)置。
  • BinLogStreamReader:包含了讀取Binlog所需的設(shè)置,包括server_id(必須是一個(gè)唯一的標(biāo)識(shí)符,用于區(qū)分不同的復(fù)制客戶端)和only_events(指定我們感興趣的事件類型)。
  • stream函數(shù)根據(jù)事件的類型(刪除、更新或插入)打印出相應(yīng)的SQL語句。
  • main:函數(shù)設(shè)置了Binlog流讀取器,并在捕獲到任何異常時(shí)優(yōu)雅地關(guān)閉流。
  • pandas:將結(jié)果輸出到excel表格中,用于數(shù)據(jù)進(jìn)行分析處理。

4.運(yùn)行腳本

運(yùn)行這個(gè)Python腳本,它將連接到你的MySQL服務(wù)器,并開始讀取Binlog中的事件。

每當(dāng)有新的事件發(fā)生時(shí)(如插入、更新或刪除操作),它都會(huì)打印出相應(yīng)的SQL語句。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python機(jī)器學(xué)習(xí)特征重要性分析的8個(gè)常用方法實(shí)例探究

    Python機(jī)器學(xué)習(xí)特征重要性分析的8個(gè)常用方法實(shí)例探究

    本文詳細(xì)介紹8種常用的方法,涵蓋了基于決策樹、集成學(xué)習(xí)模型以及統(tǒng)計(jì)學(xué)方法的特征重要性分析,從決策樹模型到SHAP值,深入探討每種方法的原理和示例,幫助全面了解如何評(píng)估特征的重要性,將能更好地理解特征對(duì)模型預(yù)測(cè)的貢獻(xiàn),為提升模型性能和解釋模型決策提供有力支持
    2024-01-01
  • Python機(jī)器學(xué)習(xí)NLP自然語言處理基本操作之京東評(píng)論分類

    Python機(jī)器學(xué)習(xí)NLP自然語言處理基本操作之京東評(píng)論分類

    自然語言處理( Natural Language Processing, NLP)是計(jì)算機(jī)科學(xué)領(lǐng)域與人工智能領(lǐng)域中的一個(gè)重要方向。它研究能實(shí)現(xiàn)人與計(jì)算機(jī)之間用自然語言進(jìn)行有效通信的各種理論和方法
    2021-10-10
  • python中argparse模塊用法實(shí)例詳解

    python中argparse模塊用法實(shí)例詳解

    這篇文章主要介紹了python中argparse模塊用法,以實(shí)例形式較為詳細(xì)的分析了argparse模塊解析命令行參數(shù)的使用技巧,需要的朋友可以參考下
    2015-06-06
  • 全面掌握Python?JSON庫函數(shù)與方法學(xué)會(huì)JSON數(shù)據(jù)處理

    全面掌握Python?JSON庫函數(shù)與方法學(xué)會(huì)JSON數(shù)據(jù)處理

    Python提供了內(nèi)置的JSON庫,允許在Python中解析和序列化JSON數(shù)據(jù),本文將深入研究Python中JSON庫的各種函數(shù)和方法,為你提供豐富的示例代碼來幫助掌握J(rèn)SON處理的方方面面
    2024-01-01
  • python not運(yùn)算符的實(shí)例用法

    python not運(yùn)算符的實(shí)例用法

    在本篇文章里小編給大家整理了一篇關(guān)于python not運(yùn)算符的實(shí)例用法,有需要的朋友們可以學(xué)習(xí)參考下。
    2021-06-06
  • Python項(xiàng)目管理的利器Poetry的使用

    Python項(xiàng)目管理的利器Poetry的使用

    在?Python?項(xiàng)目開發(fā)中,包管理、依賴管理和虛擬環(huán)境的創(chuàng)建一直是開發(fā)者們經(jīng)常面對(duì)的難題,本文主要介紹了Python項(xiàng)目管理的利器Poetry的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-04-04
  • Python多版本管理工具pyenv安裝及使用詳解

    Python多版本管理工具pyenv安裝及使用詳解

    pyenv是一個(gè)高效的Python版本管理工具,支持多版本共存和靈活切換,它通過修改環(huán)境變量實(shí)現(xiàn)版本隔離,本文就來詳細(xì)的介紹一下Python多版本管理工具pyenv安裝及使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-11-11
  • ?python中字符串的常見操作總結(jié)(二)

    ?python中字符串的常見操作總結(jié)(二)

    這篇文章主要介紹了python中字符串的常見操作,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-07-07
  • python 日志模塊logging的使用場(chǎng)景及示例

    python 日志模塊logging的使用場(chǎng)景及示例

    這篇文章主要介紹了python 日志模塊logging的使用場(chǎng)景及示例,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-01-01
  • Python字符串拼接的4種方法實(shí)例

    Python字符串拼接的4種方法實(shí)例

    字符串是所有編程語言中都有的基本變量的類型?,程序員基本每天都在和字符串打交道,下面這篇文章主要給大家介紹了關(guān)于Python字符串拼接的4種方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07

最新評(píng)論

辽阳县| 沙湾县| 兴海县| 泾川县| 五华县| 贵德县| 常熟市| 宁波市| 筠连县| 雅安市| 武威市| 克拉玛依市| 汽车| 微山县| 沂源县| 来宾市| 临湘市| 峨眉山市| 工布江达县| 中江县| 五河县| 肥城市| 安达市| 金塔县| 德江县| 七台河市| 陵川县| 富宁县| 台山市| 绥棱县| 都兰县| 梅河口市| 繁峙县| 洞口县| 特克斯县| 三台县| 延边| 金华市| 丰都县| 靖江市| 关岭|