9
9
10
10
class BinLogEvent (object ):
11
11
def __init__ (self , from_packet , event_size , table_map , ctl_connection ,
12
+ mysql_version = (0 ,0 ,0 ),
12
13
only_tables = None ,
13
14
ignored_tables = None ,
14
15
only_schemas = None ,
@@ -21,6 +22,7 @@ def __init__(self, from_packet, event_size, table_map, ctl_connection,
21
22
self .timestamp = self .packet .timestamp
22
23
self .event_size = event_size
23
24
self ._ctl_connection = ctl_connection
25
+ self .mysql_version = mysql_version
24
26
self ._fail_on_table_metadata_unavailable = fail_on_table_metadata_unavailable
25
27
# The event have been fully processed, if processed is false
26
28
# the event will be skipped
@@ -59,8 +61,10 @@ def __init__(self, from_packet, event_size, table_map, ctl_connection, **kwargs)
59
61
self .sid = self .packet .read (16 )
60
62
self .gno = struct .unpack ('<Q' , self .packet .read (8 ))[0 ]
61
63
self .lt_type = byte2int (self .packet .read (1 ))
62
- self .last_committed = struct .unpack ('<Q' , self .packet .read (8 ))[0 ]
63
- self .sequence_number = struct .unpack ('<Q' , self .packet .read (8 ))[0 ]
64
+
65
+ if self .mysql_version >= (5 , 7 ):
66
+ self .last_committed = struct .unpack ('<Q' , self .packet .read (8 ))[0 ]
67
+ self .sequence_number = struct .unpack ('<Q' , self .packet .read (8 ))[0 ]
64
68
65
69
@property
66
70
def gtid (self ):
@@ -76,8 +80,9 @@ def gtid(self):
76
80
def _dump (self ):
77
81
print ("Commit: %s" % self .commit_flag )
78
82
print ("GTID_NEXT: %s" % self .gtid )
79
- print ("last_committed: %d" % self .last_committed )
80
- print ("sequence_number: %d" % self .sequence_number )
83
+ if hasattr (self , "last_committed" ):
84
+ print ("last_committed: %d" % self .last_committed )
85
+ print ("sequence_number: %d" % self .sequence_number )
81
86
82
87
def __repr__ (self ):
83
88
return '<GtidEvent "%s">' % self .gtid
@@ -135,7 +140,17 @@ def _dump(self):
135
140
136
141
137
142
class FormatDescriptionEvent (BinLogEvent ):
138
- pass
143
+ def __init__ (self , from_packet , event_size , table_map , ctl_connection , ** kwargs ):
144
+ super (FormatDescriptionEvent , self ).__init__ (from_packet , event_size , table_map ,
145
+ ctl_connection , ** kwargs )
146
+ self .binlog_version = struct .unpack ('<H' , self .packet .read (2 ))
147
+ self .mysql_version_str = self .packet .read (50 ).rstrip (b'\0 ' ).decode ()
148
+ numbers = self .mysql_version_str .split ('-' )[0 ]
149
+ self .mysql_version = tuple (map (int , numbers .split ('.' )))
150
+
151
+ def _dump (self ):
152
+ print ("Binlog version: %s" % self .binlog_version )
153
+ print ("MySQL version: %s" % self .mysql_version_str )
139
154
140
155
141
156
class StopEvent (BinLogEvent ):
0 commit comments