Bifrost Document

Version 1.6.x

Bifrost ---- A heterogeneous middleware which can synchronize MySQL binlog data To Redis,MongoDB,ClickHouse...

MySQL binlog parser

Bristol is a MySQL binlog parser

Github : https://github.com/brokercap/Bristol

Points:

data validation: https://github.com/brokercap/Bristol/tree/master/test

MySQL Supports: 5.1 - 8.0

performance testing tool:

https://github.com/brokercap/Bristol/tree/master/test/BristolPerformanceTest

example

func callback(data *mysql.EventReslut) {
	log.Println(data)
	if data.Query == ""{
		for k,v := range data.Rows[len(data.Rows)-1]{
			log.Println(k,"==",v,"(",reflect.TypeOf(v),")")
		}
	}
}

func main() {
	filename := "mysql-bin.000071"

	var position uint32 = 203785789
	var DBsource = ""

	DBsource = "root:root@tcp(192.168.220.128:3308)/bifrost_test"
	filename = "mysql-bin.000004"
	position = 25051078

	reslut := make(chan error, 1)
	m := make(map[string]uint8, 0)
	m["bifrost_test"] = 1
	BinlogDump := &mysql.BinlogDump{
		DataSource:    DBsource,
		CallbackFun:   callback,
		//ReplicateDoDb: m,
		OnlyEvent:     []mysql.EventType{mysql.QUERY_EVENT, mysql.WRITE_ROWS_EVENTv1, mysql.UPDATE_ROWS_EVENTv1, mysql.DELETE_ROWS_EVENTv1,mysql.WRITE_ROWS_EVENTv2, mysql.UPDATE_ROWS_EVENTv2, mysql.DELETE_ROWS_EVENTv2},
	}
	BinlogDump.AddReplicateDoDb("bifrost_test","*")
	BinlogDump.AddReplicateDoDb("test","*")
	go BinlogDump.StartDumpBinlog(filename, position, 633,reslut,"",0)
	go func() {
		for {
			v := <-reslut
			log.Printf("monitor reslut:%s \r\n", v)
		}
	}()

	for {
		time.Sleep(10 * time.Second)
	}
}
DDL

MySQL binlog position must be after ddl

Data type mapping(golang)

TINYINT ( int8 | unit8 ) , SMALLINT ( int16 | unit16 ) , MEDIUMINT ( int32 | uint32 ), INT ( int32 | uint32 ) , BIGINT ( int64 | uint64 )

FLOAT ( float32 ) , DOUBLE ( float64 ) ,REAL ( float64 )

DECIMAL , NUMERIC( string )

DATE , TIME , YEAR , DATETIME , TIMESTAMP ( string )

CHAR , VARCHAR ( string )

TEXT , TINYTEXT , MEDIUMINTTEXT , LONGTEXT ( string )

BLOB, TINYBLOB , MEDIUMINTBLOB , LONGBLOB ( string )

ENUM ( string )

SET ( []string )

BIT ( int64 )

JSON ( map | array )

Last updated on 1 Nov 2020
Published on 1 Nov 2020
Edit on GitHub