一种快速取得MySQL Binlog开始时间的方法
Posted 小灯数据
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一种快速取得MySQL 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]#
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
[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()
{
"$1" theFile=
#取出文件头做分析
${theFile} | head -1` binlogHead=`hexdump
#binlog文件校验
echo $binlogHead | awk '{print $1$2$3}'` binlogCrc=`
if [ "${binlogCrc}" != '000000062fe6e69' ]; then
echo '${theFile} is damage.'
exit 1
fi
#计算binlog的开始时间
echo $binlogHead | awk '{print $5$4}' | gawk ' { printf strtonum("0x" $0)}' ` binlogBeginTimeInt=`
"1970-01-01 UTC $binlogBeginTimeInt seconds" "+%F %T"` binlogBeginTime=`date -d
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]#
长按下图二维码,关注更多数据库实用技巧。
以上是关于一种快速取得MySQL Binlog开始时间的方法的主要内容,如果未能解决你的问题,请参考以下文章