• 如何查看binglog 的创建日期


    ls -ltr binglog_name 只能看哪天产生的,但是看不到具体时间,比如小时,分钟,秒钟

    谢谢 

    所以参考了这篇文档https://blog.csdn.net/mysqltop/article/details/105305072

    我们想知道一个binlog的开始时间和结束时间,往往是通过binlog文件的上一个文件的文件时间作为当前binlog的开始时间,当前binlog的文件时间作为结束时间,例如:

    [root@VM_0_6_centos binlog]# ll -lhrt
    total 163M
    -rw-r----- 1 mysql mysql 2.9K Mar 30 01:35 binlog.000082
    -rw-r----- 1 mysql mysql 2.0K Mar 30 01:54 binlog.000083
    -rw-r----- 1 mysql mysql 7.3K Mar 30 15:17 binlog.000084
    -rw-r----- 1 mysql mysql 148 Mar 30 15:17 binlog.index
    -rw-r----- 1 mysql mysql 163M Apr 1 14:07 binlog.000085
    [root@VM_0_6_centos binlog]#
      我们通过观察可得到binlog.000084这个文件的开始时间应该是“2020-03-30 01:54”(读binlog.000083的文件时间)。但如果我们只拿到一个binlog文件,又或者我想知道上述binlog.000082的开始时间呢?方法当然是有的,我们可以使用mysqlbinlog命令把binlog解析出来,然后再查看即可,例如:

    [root@VM_0_6_centos binlog]# mysqlbinlog -v binlog.000082 | head
    /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
    /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
    DELIMITER /*!*/;
    # at 4
    #200327 23:45:14 server id 63306 end_log_pos 124 CRC32 0xfad483d6 Start: binlog v 4, server v 8.0.19 created 200327 23:45:14 at startup
    ROLLBACK/*!*/;
    BINLOG '
    ih9+Xg9K9wAAeAAAAHwAAAAAAAQAOC4wLjE5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAACKH35eEwANAAgAAAAABAAEAAAAYAAEGggAAAAICAgCAAAACgoKKioAEjQA
    CgHWg9T6
    [root@VM_0_6_centos binlog]#
       可见这个binlog的开始时间是“200327 23:45:14”。我们这个binlog.000082很小,只有2.9K,这种方法也是很快的,但如果我们要查看的binlog很大呢?例如1G一个binlog,现在有几百个1G的binlog要查,那么这种方法是十分慢了。下面介绍一种查看binlog十六进制的文件头得出来的开始时间,shell函数如下:

    function getBinlogStartTime()
    {
    theFile="$1"
    #取出文件头做分析
    binlogHead=`hexdump ${theFile} | head -1`
    #binlog文件校验
    binlogCrc=`echo $binlogHead | awk '{print $1$2$3}'`
    if [ "${binlogCrc}" != '000000062fe6e69' ]; then
    echo '${theFile} is damage.'
    exit 1
    fi
    #计算binlog的开始时间
    binlogBeginTimeInt=`echo $binlogHead | awk '{print $5$4}' | gawk ' { printf strtonum("0x" $0)}' `
    binlogBeginTime=`date -d "1970-01-01 UTC $binlogBeginTimeInt seconds" "+%F %T"`
    echo $binlogBeginTime
    }
    #调用方法: getBinlogStartTime binlog.000082
      我们通过取出binlog文件十六进制的第一行进行分析即可,因此即使binlog文件很大也是秒杀的。下面我们看下效果:

    [root@VM_0_6_centos binlog]# ll -lhrt
    total 163M
    -rw-r----- 1 mysql mysql 2.9K Mar 30 01:35 binlog.000082
    -rw-r----- 1 mysql mysql 2.0K Mar 30 01:54 binlog.000083
    -rw-r----- 1 mysql mysql 7.3K Mar 30 15:17 binlog.000084
    -rw-r----- 1 mysql mysql 148 Mar 30 15:17 binlog.index
    -rw-r----- 1 mysql mysql 163M Apr 1 14:07 binlog.000085
    [root@VM_0_6_centos binlog]# function getBinlogStartTime()
    > {
    > theFile="$1"
    > #取出文件头做分析
    > binlogHead=`hexdump ${theFile} | head -1`
    > #binlog文件校验
    > binlogCrc=`echo $binlogHead | awk '{print $1$2$3}'`
    > if [ "${binlogCrc}" != '000000062fe6e69' ]; then
    > echo '${theFile} is damage.'
    > exit 1
    > fi
    > #计算binlog的开始时间
    > binlogBeginTimeInt=`echo $binlogHead | awk '{print $5$4}' | gawk ' { printf strtonum("0x" $0)}' `
    > binlogBeginTime=`date -d "1970-01-01 UTC $binlogBeginTimeInt seconds" "+%F %T"`
    > echo $binlogBeginTime
    > }
    [root@VM_0_6_centos binlog]#
    [root@VM_0_6_centos binlog]# getBinlogStartTime binlog.000082
    2020-03-27 23:45:14
    [root@VM_0_6_centos binlog]# getBinlogStartTime binlog.000085
    2020-03-30 15:17:40
    [root@VM_0_6_centos binlog]#
      可以看到用这个函数可以很方便且快速的计算出binlog的开始时间。

     
    ————————————————
    版权声明:本文为CSDN博主「小灯数据-鹰飞」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/mysqltop/article/details/105305072

    ##########sample 

     1.以下函数直接在当前shell 脚本执行,当前shell 下生效,不用定义在脚本里

    function getBinlogStartTime()

    {
    theFile="$1"

    #取出文件头做分析

    binlogHead=`hexdump ${theFile} | head -1`

    #binlog文件校验

    binlogCrc=`echo $binlogHead | awk '{print $1$2$3}'`

    if [ "${binlogCrc}" != '000000062fe6e69' ]; then

    echo '${theFile} is damage.'

    exit 1

    fi

    #计算binlog的开始时间

    binlogBeginTimeInt=`echo $binlogHead | awk '{print $5$4}' | gawk ' { printf strtonum("0x" $0)}' `

    binlogBeginTime=`date -d "1970-01-01 UTC $binlogBeginTimeInt seconds" "+%F %T"`

    echo $binlogBeginTime
    }

    2.直接在当前shell 运行这个函数,就可以了,
    getBinlogStartTime mysql-bin.000081

    炊烟起了;夕阳下了;细雨来了 多调试,交互式编程体验 记录,独立思考,对比 感谢转载作者 修车 国产化 read and connect 匍匐前进, 讲故事
  • 相关阅读:
    计算机网络学习笔记——计算机网络概述
    基础续一
    Python基础一
    linux lvm的操作手册_pvcreate_vgcreate_lvcreate_相关
    Oracle Linux 挂载存储
    MegaCLI SAS RAID Management Tool
    DELL RACADM 批量升级戴尔IDRAC固件
    LSI MegaCli 命令使用4
    LSI MegaCli 命令使用2
    LSI MegaCl i命令使用1
  • 原文地址:https://www.cnblogs.com/feiyun8616/p/14489659.html
Copyright © 2020-2023  润新知