https://hub.docker.com/r/canal/otter-all
https://github.com/alibaba/otter/wiki/Docker_QuickStart
https://github.com/alibaba/otter/wiki/QuickStart
# 使用otter实现MySQL跨机房双向同步
https://abc.htmltoo.com/thread-45958.htm
应用: mycat -> 添加服务端服务: otter
镜像: canal/otter-all:latest
卷:
/etc/localtime:/etc/localtime:ro
/data/file:/data/file
端口:(http)18080-8080
默认是 http://${host}:8080/
==================
基础概念
Pipeline:从源端到目标端的整个过程描述,主要由一些同步映射过程组成;
Channel:同步通道,单向同步中一个Pipeline组成,在双向同步中有两个Pipeline组成;
DataMediaPair:根据业务表定义映射关系,比如源表和目标表,字段映射,字段组等;
DataMedia: 抽象的数据介质概念,可以理解为数据表/mq队列定义;
DataMediaSource: 抽象的数据介质源信息,补充描述DateMedia;
ColumnPair: 定义字段映射关系;
ColumnGroup: 定义字段映射组;
Node: 处理同步过程的工作节点,对应一个jvm;
db : 数据源以及需要同步到的库
Canal : 用户获取数据库增量日志
manager : 配置同步规则设置数据源同步源等
zookeeper : 协调node进行协调工作
node : 负责任务处理,即根据任务配置对数据源进行解析并同步到目标数据库的操作。
典型管理系统架构,manager(web管理)+node(工作节点)
a. manager运行时推送同步配置到node节点
b. node节点将同步状态反馈到manager上
canal目前支持的数据库版本?
答: 支持mysql系列的5.1 ~ 5.6/5.7版本,mariadb 5/10版本. (全面支持ROW/STATEMENT/MIXED几种binlog格式的解析)
otter目前存在的同步限制?
答:这里总结了一下
暂不支持无主键表同步. (同步的表必须要有主键,无主键表update会是一个全表扫描,效率比较差)
支持部分ddl同步 (支持create table / drop table / alter table / truncate table / rename table / create index / drop index,其他类型的暂不支持,比如grant,create user,trigger等等),同时ddl语句不支持幂等性操作,所以出现重复同步时,会导致同步挂起,可通过配置高级参数:跳过ddl异常,来解决这个问题.
不支持带外键的记录同步. (数据载入算法会打散事务,进行并行处理,会导致外键约束无法满足)
数据库上trigger配置慎重. (比如源库,有一张A表配置了trigger,将A表上的变化记录到B表中,而B表也需要同步。如果目标库也有这trigger,在同步时会插入一次A表,2次B表,因为A表的同步插入也会触发trigger插入一次B表,所以有2次B表同步.)
https://www.cnblogs.com/zhjh256/p/9261725.html
https://blog.csdn.net/liujun19921020/article/details/100697341
http://shift-alt-ctrl.iteye.com/blog/2399603
http://www.htmltoo.com/