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

MySQL如何查詢Binlog 生成時(shí)間

 更新時(shí)間:2023年03月18日 16:32:10   作者:Bing@DBA  
這篇文章主要介紹了MySQL如何查詢Binlog 生成時(shí)間,通過讀取 Binlog FORMAT_DESCRIPTION_EVENT header 時(shí)間戳來實(shí)現(xiàn)讀取 Binlog 生產(chǎn)時(shí)間,本文給大家詳細(xì)講解,需要的朋友可以參考下

前言

本篇文章介紹如何查詢 Binlog 的生成時(shí)間。云上 RDS 有日志管理,但是自建實(shí)例沒有,該腳本可用于自建實(shí)例閃回定位 Binlog 文件。

在這里插入圖片描述

腳本介紹

直接上代碼吧~

通過讀取 Binlog FORMAT_DESCRIPTION_EVENT header 時(shí)間戳來實(shí)現(xiàn)讀取 Binlog 生產(chǎn)時(shí)間。

# -*- coding: utf-8 -*-
import os
import sys
import math
import time
import struct
import argparse

binlog_quer_event_stern = 4
binlog_event_fix_part = 13
table_map_event_fix_length = 8
BINLOG_FILE_HEADER = b'\xFE\x62\x69\x6E'
binlog_event_header_len = 19


class BinlogTimestamp(object):
    def __init__(self, index_path):
        self.index_path = index_path

    def main(self):
        binlog_info_list = list()
        for file_path in self.reed_index_file():
            result = self.read_binlog_pos(file_path)
            binlog_info_list.append({
                'file_name': result[0],
                'binlog_size': result[2],
                'start_time': result[1]
            })
        # print
        i = 0

        while len(binlog_info_list) > i:
            if i + 1 == len(binlog_info_list):
                end_time = 'now'
            else:
                end_time = binlog_info_list[i + 1]['start_time']

            binlog_info_list[i]['end_time'] = end_time
            print(binlog_info_list[i])
            i += 1

    def read_binlog_pos(self, binlog_path):
        binlog_file_size = self.bit_conversion(os.path.getsize(binlog_path))
        file_name = os.path.basename(binlog_path)
        with open(binlog_path, 'rb') as r:
            # read BINLOG_FILE_HEADER
            if not r.read(4) == BINLOG_FILE_HEADER:
                print("Error: Is not a standard binlog file format.")
                sys.exit(0)

            # read binlog header FORMAT_DESCRIPTION_EVENT
            read_byte = r.read(binlog_event_header_len)
            result = struct.unpack('=IBIIIH', read_byte)
            type_code, event_length, event_timestamp, next_position = result[1], result[3], result[0], result[4]
            binlog_start_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(event_timestamp))

        return file_name, binlog_start_time, binlog_file_size

    def reed_index_file(self):
        """
        讀取 mysql-bin.index 文件
        select @@log_bin_index;
        :return:
        """
        with open(self.index_path) as r:
            content = r.readlines()

        return [x.replace('\n', '') for x in content]

    @staticmethod
    def bit_conversion(size, dot=2):
        size = float(size)
        if 0 <= size < 1:
            human_size = str(round(size / 0.125, dot)) + ' b'
        elif 1 <= size < 1024:
            human_size = str(round(size, dot)) + ' B'
        elif math.pow(1024, 1) <= size < math.pow(1024, 2):
            human_size = str(round(size / math.pow(1024, 1), dot)) + ' KB'
        elif math.pow(1024, 2) <= size < math.pow(1024, 3):
            human_size = str(round(size / math.pow(1024, 2), dot)) + ' MB'
        elif math.pow(1024, 3) <= size < math.pow(1024, 4):
            human_size = str(round(size / math.pow(1024, 3), dot)) + ' GB'
        elif math.pow(1024, 4) <= size < math.pow(1024, 5):
            human_size = str(round(size / math.pow(1024, 4), dot)) + ' TB'
        elif math.pow(1024, 5) <= size < math.pow(1024, 6):
            human_size = str(round(size / math.pow(1024, 5), dot)) + ' PB'
        elif math.pow(1024, 6) <= size < math.pow(1024, 7):
            human_size = str(round(size / math.pow(1024, 6), dot)) + ' EB'
        elif math.pow(1024, 7) <= size < math.pow(1024, 8):
            human_size = str(round(size / math.pow(1024, 7), dot)) + ' ZB'
        elif math.pow(1024, 8) <= size < math.pow(1024, 9):
            human_size = str(round(size / math.pow(1024, 8), dot)) + ' YB'
        elif math.pow(1024, 9) <= size < math.pow(1024, 10):
            human_size = str(round(size / math.pow(1024, 9), dot)) + ' BB'
        elif math.pow(1024, 10) <= size < math.pow(1024, 11):
            human_size = str(round(size / math.pow(1024, 10), dot)) + ' NB'
        elif math.pow(1024, 11) <= size < math.pow(1024, 12):
            human_size = str(round(size / math.pow(1024, 11), dot)) + ' DB'
        elif math.pow(1024, 12) <= size:
            human_size = str(round(size / math.pow(1024, 12), dot)) + ' CB'
        else:
            raise ValueError('bit_conversion Error')
        return human_size


if __name__ == '__main__':
    file_name = sys.argv[1]

    bt = BinlogTimestamp(file_name)
    bt.main()


使用案例

1. 查詢 binlog index 文件

在這里插入圖片描述

2. 使用腳本查詢時(shí)間

腳本上傳到 MySQL 服務(wù)器后,指定 binlog index 文件位置即可:

python check_bintime.py /data/mysql_57/logs/mysql-bin.index

在這里插入圖片描述

到此這篇關(guān)于MySQL如何查詢Binlog 生成時(shí)間的文章就介紹到這了,更多相關(guān)mysql查詢Binlog 生成時(shí)間內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 遠(yuǎn)程連接mysql 授權(quán)方法詳解

    遠(yuǎn)程連接mysql 授權(quán)方法詳解

    今在服務(wù)器上有mysql數(shù)據(jù)庫,遠(yuǎn)程訪問,不想公布root賬戶,所以,創(chuàng)建了demo賬戶,允許demo賬戶在任何地方都能訪問mysql數(shù)據(jù)庫中shandong庫,接下來為您詳細(xì)介紹
    2012-11-11
  • Windows下MySQL8.0.18安裝教程(圖解)

    Windows下MySQL8.0.18安裝教程(圖解)

    這篇文章主要介紹了Windows下MySQL8.0.18安裝教程,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-11-11
  • MySQL 主主同步配置步驟

    MySQL 主主同步配置步驟

    創(chuàng)建同步用戶、修改 /etc/my.cnf 配置文件,為其添加以下內(nèi)容、分別重啟服務(wù)器ODD EVEN 上的mysql服務(wù)
    2013-05-05
  • Windows10 mysql 8.0.12 非安裝版配置啟動(dòng)方法

    Windows10 mysql 8.0.12 非安裝版配置啟動(dòng)方法

    這篇文章主要為大家詳細(xì)介紹了Windows10 mysql 8.0.12 非安裝版配置啟動(dòng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Windows系統(tǒng)下MySQL8.0.21安裝教程(圖文詳解)

    Windows系統(tǒng)下MySQL8.0.21安裝教程(圖文詳解)

    這篇文章主要介紹了Windows系統(tǒng)下MySQL8.0.21安裝教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • MySQL和SQLServer的比較

    MySQL和SQLServer的比較

    這篇文章主要介紹了MySQL和SQLServer的比較
    2006-12-12
  • MySQL數(shù)據(jù)庫的shell腳本自動(dòng)備份

    MySQL數(shù)據(jù)庫的shell腳本自動(dòng)備份

    這篇文章主要介紹了MySQL數(shù)據(jù)庫的shell腳本自動(dòng)備份的相關(guān)資料,網(wǎng)站或應(yīng)用的后臺(tái)都有備份數(shù)據(jù)庫的功能按鈕,但需要去手工執(zhí)行。我們需要一種安全的,每天自動(dòng)備份的方法需要的朋友可以參考下
    2017-03-03
  • MySQL中的引號(hào)和反引號(hào)的區(qū)別與用法詳解

    MySQL中的引號(hào)和反引號(hào)的區(qū)別與用法詳解

    這個(gè)問題是我在學(xué)習(xí)數(shù)據(jù)庫的時(shí)候遇到的一個(gè)問題,我當(dāng)時(shí)并不能理解下圖中的一些情況,后來我也請(qǐng)教了一位大佬給我解答,最后在大佬和度娘的幫助下我大概理解了這個(gè)反引號(hào)的東西
    2021-10-10
  • Mysql中實(shí)現(xiàn)提取字符串中的數(shù)字的自定義函數(shù)分享

    Mysql中實(shí)現(xiàn)提取字符串中的數(shù)字的自定義函數(shù)分享

    這篇文章主要介紹了Mysql中實(shí)現(xiàn)提取字符串中的數(shù)字的自定義函數(shù)分享,通常這種問題是在編程語言中實(shí)現(xiàn),本文使用自定義SQL函數(shù)實(shí)現(xiàn),需要的朋友可以參考下
    2014-10-10
  • mysql拆分字符串作為查詢條件的示例代碼

    mysql拆分字符串作為查詢條件的示例代碼

    本文主要介紹了mysql拆分字符串作為查詢條件的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07

最新評(píng)論