package replication const ( //we only support MySQL 5.0.0+ binlog format, maybe??? MinBinlogVersion = 4 ) var ( //binlog header [ fe `bin` ] BinLogFileHeader = []byte{0xfe, 0x62, 0x69, 0x6e} SemiSyncIndicator byte = 0xef ) const ( LOG_EVENT_BINLOG_IN_USE_F uint16 = 0x0001 LOG_EVENT_FORCED_ROTATE_F uint16 = 0x0002 LOG_EVENT_THREAD_SPECIFIC_F uint16 = 0x0004 LOG_EVENT_SUPPRESS_USE_F uint16 = 0x0008 LOG_EVENT_UPDATE_TABLE_MAP_VERSION_F uint16 = 0x0010 LOG_EVENT_ARTIFICIAL_F uint16 = 0x0020 LOG_EVENT_RELAY_LOG_F uint16 = 0x0040 LOG_EVENT_IGNORABLE_F uint16 = 0x0080 LOG_EVENT_NO_FILTER_F uint16 = 0x0100 LOG_EVENT_MTS_ISOLATE_F uint16 = 0x0200 ) const ( BINLOG_DUMP_NEVER_STOP uint16 = 0x00 BINLOG_DUMP_NON_BLOCK uint16 = 0x01 BINLOG_SEND_ANNOTATE_ROWS_EVENT uint16 = 0x02 BINLOG_THROUGH_POSITION uint16 = 0x02 BINLOG_THROUGH_GTID uint16 = 0x04 ) const ( BINLOG_ROW_IMAGE_FULL = "FULL" BINLOG_ROW_IAMGE_MINIMAL = "MINIMAL" BINLOG_ROW_IMAGE_NOBLOB = "NOBLOB" ) const ( BINLOG_MARIADB_FL_STANDALONE = 1 << iota /*1 - FL_STANDALONE is set when there is no terminating COMMIT event*/ BINLOG_MARIADB_FL_GROUP_COMMIT_ID /*2 - FL_GROUP_COMMIT_ID is set when event group is part of a group commit on the master. Groups with same commit_id are part of the same group commit.*/ BINLOG_MARIADB_FL_TRANSACTIONAL /*4 - FL_TRANSACTIONAL is set for an event group that can be safely rolled back (no MyISAM, eg.).*/ BINLOG_MARIADB_FL_ALLOW_PARALLEL /*8 - FL_ALLOW_PARALLEL reflects the (negation of the) value of @@SESSION.skip_parallel_replication at the time of commit*/ BINLOG_MARIADB_FL_WAITED /*16 = FL_WAITED is set if a row lock wait (or other wait) is detected during the execution of the transaction*/ BINLOG_MARIADB_FL_DDL /*32 - FL_DDL is set for event group containing DDL*/ ) type EventType byte const ( UNKNOWN_EVENT EventType = iota START_EVENT_V3 QUERY_EVENT STOP_EVENT ROTATE_EVENT INTVAR_EVENT LOAD_EVENT SLAVE_EVENT CREATE_FILE_EVENT APPEND_BLOCK_EVENT EXEC_LOAD_EVENT DELETE_FILE_EVENT NEW_LOAD_EVENT RAND_EVENT USER_VAR_EVENT FORMAT_DESCRIPTION_EVENT XID_EVENT BEGIN_LOAD_QUERY_EVENT EXECUTE_LOAD_QUERY_EVENT TABLE_MAP_EVENT WRITE_ROWS_EVENTv0 UPDATE_ROWS_EVENTv0 DELETE_ROWS_EVENTv0 WRITE_ROWS_EVENTv1 UPDATE_ROWS_EVENTv1 DELETE_ROWS_EVENTv1 INCIDENT_EVENT HEARTBEAT_EVENT IGNORABLE_EVENT ROWS_QUERY_EVENT WRITE_ROWS_EVENTv2 UPDATE_ROWS_EVENTv2 DELETE_ROWS_EVENTv2 GTID_EVENT ANONYMOUS_GTID_EVENT PREVIOUS_GTIDS_EVENT TRANSACTION_CONTEXT_EVENT VIEW_CHANGE_EVENT XA_PREPARE_LOG_EVENT PARTIAL_UPDATE_ROWS_EVENT TRANSACTION_PAYLOAD_EVENT HEARTBEAT_LOG_EVENT_V2 ) const ( // MariaDB event starts from 160 MARIADB_ANNOTATE_ROWS_EVENT EventType = 160 + iota MARIADB_BINLOG_CHECKPOINT_EVENT MARIADB_GTID_EVENT MARIADB_GTID_LIST_EVENT ) func (e EventType) String() string { switch e { case UNKNOWN_EVENT: return "UnknownEvent" case START_EVENT_V3: return "StartEventV3" case QUERY_EVENT: return "QueryEvent" case STOP_EVENT: return "StopEvent" case ROTATE_EVENT: return "RotateEvent" case INTVAR_EVENT: return "IntVarEvent" case LOAD_EVENT: return "LoadEvent" case SLAVE_EVENT: return "SlaveEvent" case CREATE_FILE_EVENT: return "CreateFileEvent" case APPEND_BLOCK_EVENT: return "AppendBlockEvent" case EXEC_LOAD_EVENT: return "ExecLoadEvent" case DELETE_FILE_EVENT: return "DeleteFileEvent" case NEW_LOAD_EVENT: return "NewLoadEvent" case RAND_EVENT: return "RandEvent" case USER_VAR_EVENT: return "UserVarEvent" case FORMAT_DESCRIPTION_EVENT: return "FormatDescriptionEvent" case XID_EVENT: return "XIDEvent" case BEGIN_LOAD_QUERY_EVENT: return "BeginLoadQueryEvent" case EXECUTE_LOAD_QUERY_EVENT: return "ExectueLoadQueryEvent" case TABLE_MAP_EVENT: return "TableMapEvent" case WRITE_ROWS_EVENTv0: return "WriteRowsEventV0" case UPDATE_ROWS_EVENTv0: return "UpdateRowsEventV0" case DELETE_ROWS_EVENTv0: return "DeleteRowsEventV0" case WRITE_ROWS_EVENTv1: return "WriteRowsEventV1" case UPDATE_ROWS_EVENTv1: return "UpdateRowsEventV1" case DELETE_ROWS_EVENTv1: return "DeleteRowsEventV1" case INCIDENT_EVENT: return "IncidentEvent" case HEARTBEAT_EVENT: return "HeartbeatEvent" case IGNORABLE_EVENT: return "IgnorableEvent" case ROWS_QUERY_EVENT: return "RowsQueryEvent" case WRITE_ROWS_EVENTv2: return "WriteRowsEventV2" case UPDATE_ROWS_EVENTv2: return "UpdateRowsEventV2" case DELETE_ROWS_EVENTv2: return "DeleteRowsEventV2" case GTID_EVENT: return "GTIDEvent" case ANONYMOUS_GTID_EVENT: return "AnonymousGTIDEvent" case PREVIOUS_GTIDS_EVENT: return "PreviousGTIDsEvent" case MARIADB_ANNOTATE_ROWS_EVENT: return "MariadbAnnotateRowsEvent" case MARIADB_BINLOG_CHECKPOINT_EVENT: return "MariadbBinLogCheckPointEvent" case MARIADB_GTID_EVENT: return "MariadbGTIDEvent" case MARIADB_GTID_LIST_EVENT: return "MariadbGTIDListEvent" case TRANSACTION_CONTEXT_EVENT: return "TransactionContextEvent" case VIEW_CHANGE_EVENT: return "ViewChangeEvent" case XA_PREPARE_LOG_EVENT: return "XAPrepareLogEvent" case PARTIAL_UPDATE_ROWS_EVENT: return "PartialUpdateRowsEvent" case TRANSACTION_PAYLOAD_EVENT: return "TransactionPayloadEvent" case HEARTBEAT_LOG_EVENT_V2: return "HeartbeatLogEventV2" default: return "UnknownEvent" } } const ( BINLOG_CHECKSUM_ALG_OFF byte = 0 // Events are without checksum though its generator // is checksum-capable New Master (NM). BINLOG_CHECKSUM_ALG_CRC32 byte = 1 // CRC32 of zlib algorithm. // BINLOG_CHECKSUM_ALG_ENUM_END, // the cut line: valid alg range is [1, 0x7f]. BINLOG_CHECKSUM_ALG_UNDEF byte = 255 // special value to tag undetermined yet checksum // or events from checksum-unaware servers ) // These are TABLE_MAP_EVENT's optional metadata field type, from: libbinlogevents/include/rows_event.h const ( TABLE_MAP_OPT_META_SIGNEDNESS byte = iota + 1 TABLE_MAP_OPT_META_DEFAULT_CHARSET TABLE_MAP_OPT_META_COLUMN_CHARSET TABLE_MAP_OPT_META_COLUMN_NAME TABLE_MAP_OPT_META_SET_STR_VALUE TABLE_MAP_OPT_META_ENUM_STR_VALUE TABLE_MAP_OPT_META_GEOMETRY_TYPE TABLE_MAP_OPT_META_SIMPLE_PRIMARY_KEY TABLE_MAP_OPT_META_PRIMARY_KEY_WITH_PREFIX TABLE_MAP_OPT_META_ENUM_AND_SET_DEFAULT_CHARSET TABLE_MAP_OPT_META_ENUM_AND_SET_COLUMN_CHARSET ) type IntVarEventType byte const ( INVALID IntVarEventType = iota LAST_INSERT_ID INSERT_ID )