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) )
- 假如 id = 1 这条数据,连接有 insert ,delete ,update 操作
则只会执行最后的 update 操作,不会执行前面insert 及 delete操作
- 假如 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秒超时,也会进行刷一次