Bifrost Document

Version 1.6.x

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

MySQL

必须先选择 MySQL 的表后,再选择 目标库的MySQL 插件,在选择 目标 库表的时候,如果目标表字段和源MySQL表字段一致的情况下会自动填充

假如绑定字段映射关系,没有配置的映射关系的字段,将进行同步,与此同时,请在目标库表里,将没有配置字段映射关系的字段,设置默认值,防止出错!

 

目标库表数据类型尽可能和源库一致

假如目标库表是varchar 等字符串类型,源表是其他类型,数据转换不会有问题

转换情况如下

源表类型 目标表类型 是否有问题 备注
varchar,char,text等字符串 int 等类型 Y 假如源表存的是数字,会转成int相应类型,但值不能超过目标类型的大小;假如源表是其他字符串数据,转换会有问题
int,bit等类型 varchar,var等类型 N 只要int转成字符串长度,不超过目标表的类型长度就没有问题
int,bit等类型 int,bit等类型 N 相同类型转换不会有问题
varchar,char,text等字符串 varchar,char,text等字符串 N 相同类型转换不会有问题
varchar,char,text等字符串 set Y 源表数据,不在目标表范围内就会有问题

自动匹配表

假如没有选择目标表名,则在同步的时候,按源表名和结构自动匹配表(并不会自动创建表),需要用户自行在目标库里,事先将 MySQL 源表结构导入目标库

假如在选择了 FilterQuery :False 的情况下, 源表的 DDL 操作, 目标库也会执行相应的 DDL 操作 ,请源库执行 DDL 操作的时候,尽可能不要 SchemaName.TableName 这种跨库SQL语句执行

不需要 DDL 支持的情况下 设置 FilterQuery :True

TiDB 虽然兼容 MySQL 传输协议,但因为 TiDB 对 DDL 限制更多,比如 不支持同时 ALTER 多个字段,表字段类型变更只支挂无损操作等,请自行决定是否要设置 FilterQuery :False

 

同步模式

操作/同步模式 INSERT UPDATE DELETE
普通模式(Normal) REPLACE INTO INSERT ON DUPLICATE KEY UPDATE DELETE
日志模式-修改(LogUpdate) REPLACE INTO INSERT ON DUPLICATE KEY UPDATE INSERT ON DUPLICATE KEY UPDATE
日志模式-追加(LogUpdate) INSERT INTO INSERT INTO INSERT INTO
不同步数据(NoSyncData) / / /

 

不同步数据(NoSyncData) 只是不同步数据,假如配置了 FilterQuery:False , 还是会同步 DDL 的

 

连接配置

eg : root:root123@tcp(10.40.6.89:3306)/bifrost_test

自动过滤规则

假如同一个主键的数据,在同一批次刷数据,会自动过滤多余操作,进行性能优化操作( 只限 普通模式(Normal) 和 日志模式-修改(LogUpdate) ,日志模式-修改(LogUpdate) )

 

  1. 假如 id = 1 这条数据,连接有 insert ,delete ,update 操作

则只会执行最后的 update 操作,不会执行前面insert 及 delete操作

 

  1. 假如 id = 1 这条数据,连接有 insert ,delete ,insert ,delete 顺序操作

则只会执行最后的 delete 操作一次,不会执行 insert

 

标签

{$Timestamp} : 同步的时间戳,并不是 Binlog 发生的时间

{$EventType} : 事件类型,insert delete update 三个字符串

{$BinlogTimestamp} : Binlog记录的时间戳

{$BinlogFileNum} : Binlog文件编号,并不是 整个Binlog文件名,比如 binlog 文件是 mysql-bin.000001 那这个 BinlogFileNum 的值 是1

{$BinlogPosition} : Binlog position 位点

 

NULL 值

所有数据类型都支持Null值,假如源表是 Null ,但是目标库有默认值,则同步的时候,目标表以默认值填充

假如 NullTransferDefault参数配置成了True,即使目标库表中没有默认值,也会强制转成相对应类型的默认值

类型 默认值
int,bigint,smallinit,mediumint,tinyint,bit 0
timestamp 1970-01-01 00:00:01
datetime 1000-01-01 00:00:00
date 1970-01-01
time 00:00:01
year 1970
bool false
其他 空(“”)

备注

必须只能选择一个字段为主键

不支持批量设置表

BatchSize参数代表累积多少条数据刷一次数据到MySQL,假如一直没有数据从 MySQL 过来,则默认5秒超时,也会进行刷一次

Last updated on 30 Jan 2021
Edit on GitHub