经常需要在 binlog 中查找一些日志信息,于是写了一个简单的脚本。对于非常巨大的 binlog 文件,该脚本可能会速度慢,毕竟还是用的 list,暂时没想到好办法。
详细看代码:
#/usr/bin/python #2016-04-12 #search string in the binlogs #usage: #put this file into binlog-dir,exec as: #"python test.py 111 123 update" or #"python test.py 111 123 update and insert" or #"python test.py 111 123 update or delete" #the nums are the binlog-num. import sys import subprocess def find_str(files): for file in files: comm = "mysqlbinlog {0}".format(file) lines = subprocess.Popen(comm, shell=True, stdout=subprocess.PIPE) lines = lines.stdout.readlines() for line in lines: line = line.lower() if len(sys.argv) == 4: if sys.argv[3] + ‘ ‘ in line: yield line elif len(sys.argv) == 6 and sys.argv[4] == "and": if sys.argv[3] + ‘ ‘ and sys.argv[5] + ‘ ‘ in line: yield line elif len(sys.argv) == 6 and sys.argv[4] == "or": if sys.argv[3] + ‘ ‘ or sys.argv[5] + ‘ ‘ in line: yield line if __name__ == "__main__": start = sys.argv[1] end = sys.argv[2] files = ["updatelog.{0:06d}".format(i) for i in range(int(start), int(end)+1)] f = find_str(files) for i in f: print(i)
时间: 2024-10-11 03:22:32