def test_with_delayed_statement(self): filename = 'testing/data/mysql-bin.delayed-event' parser = YBinlogP(filename) events = list(parser) assert_equal(len(events), 38) # Event has a timestamp way in the past relative to FDE assert_equal(events[30].time, datetime.datetime(2013, 07, 30, 10, 2, 37))
def main(filename): dirname = os.path.dirname(filename) parser = YBinlogP(filename, always_update=True) while True: for i, event in enumerate(parser): print event if event.event_type == "ROTATE_EVENT": next_file = os.path.join(dirname, event.data.file_name) parser.close() parser = YBinlogP(next_file, always_update=True) else: print "Got to end at %r" % (parser.tell(), ) break parser.close()
def main(filename): dirname = os.path.dirname(filename) parser = YBinlogP(filename, always_update=True) while True: for i, event in enumerate(parser): print event if event.event_type == "ROTATE_EVENT": next_file = os.path.join(dirname, event.data.file_name) parser.close() parser = YBinlogP(next_file, always_update=True) else: print "Got to end at %r" % (parser.tell(),) break parser.close()
def test_default_path(self): filename = 'testing/data/mysql-bin.default-path' parser = YBinlogP(filename) events = list(parser) assert_equal(len(events), 38) last_event = events[-1] assert_equal(last_event.event_type, EventType.rotate) assert_equal(last_event.data.file_name, 'mysql-bin.000008') assert_equal(last_event.data.next_position, 4) last_commit = events[-2] assert_equal(last_commit.event_type, EventType.xid) last_query = events[-3] assert_equal(last_query.event_type, EventType.query) assert_equal(last_query.data.db_name, 'foobar') assert_equal(last_query.data.statement, 'INSERT INTO test2(x) VALUES("Bananas r good")')
from ybinlogp import YBinlogP import sys bp = YBinlogP(sys.argv[1], always_update=True) while True: for i, event in enumerate(bp): if event.event_type == "ROTATE_EVENT": next_file = event.data.file_name bp.clean_up() bp = YBinlogP(next_file, always_update=True) break else: print event.event_type else: print "Got to end at %r" % (bp.tell(), ) break bp.clean_up()
#-*-coding:utf8-*- import sys sys.path.insert(0, "../ybinlogp/") import os import time from datetime import datetime import re from collections import defaultdict import redis from ybinlogp import YBinlogP from config import REDIS_HOST, REDIS_PORT, EXPIRE redis_conn = redis.Redis(REDIS_HOST, REDIS_PORT) pattern = re.compile(r'\(([0-9]+),([0-9]+),([0-9]+),([0-9]+)\)') bp = YBinlogP(sys.argv[1], always_update=True) g_current_file = sys.argv[1] buffer_dict = defaultdict(list) def get_next_filename(current_file): #mysql-bin.000016 prefix, num = current_file.split(".") next_num = "%06i" %(int(num) + 1) return "%s.%s" %(prefix, next_num) def next_file_exists(filename): return os.path.exists(filename) def flush_cache_to_redis(): for k, v in buffer_dict.items(): if not redis_conn.exists(k):