欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

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

1.安裝pymysqlreplication

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

pip install pymysqlreplication

2.配置MySQL

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

3.編寫Python腳本

下面是一個簡單的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服務器上的其他復制客戶端不同
        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()

在這個腳本中:

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

4.運行腳本

運行這個Python腳本,它將連接到你的MySQL服務器,并開始讀取Binlog中的事件。

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

總結(jié)

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

相關(guān)文章

  • python實現(xiàn)讀取excel寫入mysql的小工具詳解

    python實現(xiàn)讀取excel寫入mysql的小工具詳解

    EXCEL 和 MySQL 大體上來說都可以算是"數(shù)據(jù)庫",MySQL貌似有EXCEL的接口,但是最近在自學Python,用Python實現(xiàn)了一下,下面這篇文章主要給大家介紹了關(guān)于利用python實現(xiàn)讀取excel寫入mysql的一個小工具,需要的朋友可以參考下。
    2017-11-11
  • python使用rpc框架gRPC的方法

    python使用rpc框架gRPC的方法

    這篇文章主要為大家詳細介紹了python使用rpc框架gRPC的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • Python如何實現(xiàn)xml解析并輸出到Excel上

    Python如何實現(xiàn)xml解析并輸出到Excel上

    本文介紹了如何使用Python的ElementTree模塊解析XML文件,并將解析后的數(shù)據(jù)寫入Excel文件,通過編寫XML文件、解析XML、編寫將數(shù)據(jù)寫入Excel的函數(shù),最終實現(xiàn)XML數(shù)據(jù)到Excel的轉(zhuǎn)換
    2025-02-02
  • 基于Python實現(xiàn)帕累托圖的示例詳解

    基于Python實現(xiàn)帕累托圖的示例詳解

    帕累托圖是一種特殊的直方圖, 在項目管理知識體系中屬于質(zhì)量管理的工具。本文為大家整理了Python實現(xiàn)帕累托圖的方法,需要的可以參考一下
    2023-03-03
  • Python基于回溯法子集樹模板解決全排列問題示例

    Python基于回溯法子集樹模板解決全排列問題示例

    這篇文章主要介紹了Python基于回溯法子集樹模板解決全排列問題,簡單描述了全排列問題并結(jié)合實例形式分析了Python使用回溯法子集樹模板解決全排列問題的具體步驟與相關(guān)操作注意事項,需要的朋友可以參考下
    2017-09-09
  • python基礎(chǔ)之裝飾器詳解

    python基礎(chǔ)之裝飾器詳解

    這篇文章主要介紹了python基礎(chǔ)之裝飾器詳解,文中有非常詳細的代碼示例,對正在學習python的小伙伴們有一定的幫助,需要的朋友可以參考下
    2021-04-04
  • 在PyCharm中遇到pip安裝 失敗問題及解決方案(pip失效時的解決方案)

    在PyCharm中遇到pip安裝 失敗問題及解決方案(pip失效時的解決方案)

    這篇文章主要介紹了在PyCharm中遇到pip安裝失敗問題及解決方案(pip失效時的解決方案),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • 最新評論