99
1010class BinLogEvent (object ):
1111 def __init__ (self , from_packet , event_size , table_map , ctl_connection ,
12+ mysql_version = (0 ,0 ,0 ),
1213 only_tables = None ,
1314 ignored_tables = None ,
1415 only_schemas = None ,
@@ -21,6 +22,7 @@ def __init__(self, from_packet, event_size, table_map, ctl_connection,
2122 self .timestamp = self .packet .timestamp
2223 self .event_size = event_size
2324 self ._ctl_connection = ctl_connection
25+ self .mysql_version = mysql_version
2426 self ._fail_on_table_metadata_unavailable = fail_on_table_metadata_unavailable
2527 # The event have been fully processed, if processed is false
2628 # the event will be skipped
@@ -59,8 +61,10 @@ def __init__(self, from_packet, event_size, table_map, ctl_connection, **kwargs)
5961 self .sid = self .packet .read (16 )
6062 self .gno = struct .unpack ('<Q' , self .packet .read (8 ))[0 ]
6163 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 ]
6468
6569 @property
6670 def gtid (self ):
@@ -76,8 +80,9 @@ def gtid(self):
7680 def _dump (self ):
7781 print ("Commit: %s" % self .commit_flag )
7882 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 )
8186
8287 def __repr__ (self ):
8388 return '<GtidEvent "%s">' % self .gtid
@@ -135,7 +140,17 @@ def _dump(self):
135140
136141
137142class 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 )
139154
140155
141156class StopEvent (BinLogEvent ):
0 commit comments