简述

otter是一个基于canal的数据同步平台,含义是水獭,主要的功能就是可以将mysql的数据同步至另外mysql或者oracle,在项目中应用场景主要是多数据中心、BI系统抽取数据、灾备。

另外也支持双向同步(即A库同步给B库,B库也同步给A库)、文件同步,不过目前笔者这还没用到。

简单就可以理解成在canel的基础上做了一个mysql的同步平台(带WEB管理界面),在界面上,你可以定义相应的映射规则,otter进程就会根据你定义的规则读取binlog,并更新到目标库中去

github的地址:https://github.com/alibaba/otter

架构

otter是典型的管理结构,由以下三部分组成:

1、一个后台的manager(web,对应一个jvm),管理员通过这个管理界面配置相应的同步任务

2、一个或者多个真正做事情的node(工作节点,对应一个jvm),manager将配置任务推送给node,由node真正干活

3、为了node之间能协同工作,需要有个zookeeper,解决分布式的调度问题

整体的架构如下:

Pipeline:从源端到目标端的整个过程描述,主要由一些同步映射过程组成。

Channel:同步通道,单项同步中由一个Pipeline组成,在双向同步中由两个Pipleline组成。

安装配置

参考此博文吧,不赘述,不难
https://blog.csdn.net/wudufeng/article/details/78688240

自由门

otter默认是只支持源库的增量更新的(因为他只是读取源库的binlog),如果我们有全表更新或者想要历史数据的需求怎么办?这就涉及到otter的自由门功能。

这个功能在官网的文档中说的语焉不详,而且也不好找,但是是个非常有用的功能。因此简单说下

首先需要在源库中,需要增加一个retl库和一个密码为retl的retl用户

/*
供 otter 使用, otter 需要对 retl.* 的读写权限,以及对业务表的读写权限
1. 创建database retl
*/
CREATE DATABASE retl;/* 2. 用户授权 给同步用户授权 */
CREATE USER retl@'%' IDENTIFIED BY 'retl';
GRANT USAGE ON *.* TO `retl`@'%';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO `retl`@'%';
GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON `retl`.* TO `retl`@'%';
/* 业务表授权,这里可以限定只授权同步业务的表 */
GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO `retl`@'%';  /* 3. 创建系统表 */
USE retl;
DROP TABLE IF EXISTS retl.retl_buffer;
DROP TABLE IF EXISTS retl.retl_mark;
DROP TABLE IF EXISTS retl.xdual;CREATE TABLE retl_buffer
(   ID BIGINT(20) AUTO_INCREMENT,TABLE_ID INT(11) NOT NULL,FULL_NAME varchar(512),TYPE CHAR(1) NOT NULL,PK_DATA VARCHAR(256) NOT NULL,GMT_CREATE TIMESTAMP NOT NULL,GMT_MODIFIED TIMESTAMP NOT NULL,CONSTRAINT RETL_BUFFER_ID PRIMARY KEY (ID)
)  ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE retl_mark
(   ID BIGINT AUTO_INCREMENT,CHANNEL_ID INT(11),CHANNEL_INFO varchar(128),CONSTRAINT RETL_MARK_ID PRIMARY KEY (ID)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;CREATE TABLE xdual (ID BIGINT(20) NOT NULL AUTO_INCREMENT,X timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (ID)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;/* 4. 插入初始化数据 */
INSERT INTO retl.xdual(id, x) VALUES (1,now()) ON DUPLICATE KEY UPDATE x = now();

下面说说retl_buffer这张表

CREATE TABLE retl_buffer (    ID BIGINT AUTO_INCREMENT,   ## 无意义,自增即可TABLE_ID INT(11) NOT NULL,   ## tableId, 可通过该链接查询:http://otter.alibaba-inc.com/data_media_list.htm,即序号这一列,如果配置的是正则,需要指定full_name,当前table_id设置为0. FULL_NAME varchar(512),  ## schemaName + '.' +  tableName  (如果明确指定了table_id,可以不用指定full_name)TYPE CHAR(1) NOT NULL,   ## I/U/D ,分别对应于insert/update/deletePK_DATA VARCHAR(256) NOT NULL, ## 多个pk之间使用char(1)进行分隔GMT_CREATE TIMESTAMP NOT NULL, ## 无意义,系统时间即可GMT_MODIFIED TIMESTAMP NOT NULL,  ## 无意义,系统时间即可CONSTRAINT RETL_BUFFER_ID PRIMARY KEY (ID) )  ENGINE=InnoDB DEFAULT CHARSET=utf8;

之后的操作其实就是,把你想要同步表的表名及记录ID插入到retl_buffer表即可

insert into retl.retl_buffer(ID,TABLE_ID, FULL_NAME,TYPE,PK_DATA,GMT_CREATE,GMT_MODIFIED) (select null,0,'$schema.table$','I',id,now(),now() from $schema.table$);

如果针对多主键时,对应的PK_DATA需要将需要同步表几个主键按照(char)1进行拼接。

以下这条sql的意思就是将rrrr.t_test的主键为aaa的这条记录按照规则插入到目标库

insert into `retl`.`retl_buffer` ( `TABLE_ID`, `FULL_NAME`, `TYPE`, `PK_DATA`, `GMT_CREATE`, `GMT_MODIFIED`) values ( '0', 'rrrr.t_test', 'I', 'aaa', now(), now());

其实原理还是使用canel读取了源库的retl_buffer操作binlog来进行实现的,所以在使用此功能时,channel必须处于工作状态。

注意事项

  1. 同步表必须有主键
  2. 如果channel已经建立,数据表字段更新的时候,只允许新增字段到末尾。还有就是新增字段要先加目标库,再加源库

数据同步工具otter(二)相关推荐

  1. mysql binlog查看工具_数据同步工具otter(一)谈谈binlog和canal

    之前因为懒,没有针对otter做更多的解释和说明,在使用过程中,也发现了一些问题,此次补上一个完整的文档,方便大家使用. Otter是基于cannal开源的,canal又是基于mysql binlog ...

  2. canal - 数据同步工具

    一.应用场景 在前面Echarts - 实现图表显示中,我们使用了服务调用(统计表中的信息通过调用用户模块服务来获取)获取统计信息,这样耦合度高,效率相对较低,目前有另一种方法,通过实时同步数据库表的 ...

  3. DataX离线数据同步工具/平台

    DataX离线数据同步工具/平台 DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL.SQL Server.Oracle.PostgreSQL.HDFS.Hive.O ...

  4. 高效数据同步工具DataX的使用

    一.DataX 简介 DataX 是阿里云 DataWorks 数据集成 的开源版本,主要就是用于实现数据间的离线同步. DataX 致力于实现包括关系型数据库(MySQL.Oracle 等).HDF ...

  5. k8s集群下搭建数据同步工具-canal:canal-admin篇

    k8s集群下搭建数据同步工具-canal:canal-admin篇 前言 容器化 canal-admin 环境准备 k8s集群创建pod canal-admin 前言 本文使用v1.1.4版本的can ...

  6. 异构数据库数据同步工具DataX教程,安装、数据同步、java执行

    前言 DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL.Oracle.SqlServer.Postgre.HDFS.Hive.ADS.HBase.TableStor ...

  7. rsync远程数据同步工具

    一.简介 1.认识 Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.Rsync使用所谓的"Rsync算法"来 ...

  8. 【基础】:Rsync数据同步工具

    第二十一节 Rsync数据同步工具 1.1 Rsync介绍 1.1.1 什么是Rsync? 1.1.2 Rsync简介 1.3 Rsync的特性 1.1.4 Rsync的企业工作场景说明 1.2 Rs ...

  9. Linux实战教学笔记21:Rsync数据同步工具

    原文地址:https://www.cnblogs.com/chensiqiqi/p/6514315.html 目录 第二十一节 Rsync数据同步工具 1.1 Rsync介绍 1.1.1 什么是Rsy ...

  10. 【硬刚大数据】大数据同步工具之FlinkCDC/Canal/Debezium对比

    欢迎关注博客主页:微信搜:import_bigdata,大数据领域硬核原创作者_王知无(import_bigdata)_CSDN博客 欢迎点赞.收藏.留言 ,欢迎留言交流! 本文由[王知无]原创,首发 ...

最新文章

  1. 通过Shell脚本将VSS项目批量创建并且提交迁移至Gitlab
  2. 图论算法》关于tarjan算法两三事
  3. 前端基础之JavaScript_1(一)
  4. request如何setParamter
  5. 任达华遇袭是效仿“宏颜获水”事件?百度回应:严惩肇事者 以儆效尤
  6. 设计师所需图标素材网站,不用到处找了,都在这!
  7. Python学习之路--Day5
  8. potplayer如何设置以一帧一帧的逐帧播放播放?
  9. Nordic nRF52840 入门学习
  10. 研旭至尊板——F28335知识点总结①
  11. Python基础: python3书籍推荐
  12. 在三角形中rt是什么意思_数学知识点RT三角形是什么意思
  13. 磁性元件:初始磁导率、有效磁导率、品质因数、矫顽力、电感因数。。。。。
  14. Spark的下一代引擎-Project Tungsten启示录
  15. 工作日志Android,android Locat工作日志的使用
  16. mac mini u盘安装系统_系统安装丨如何制作U盘启动盘?
  17. 中国脑计划颠覆性创新之路六,用互联网与脑科学构建新AI系统模型
  18. HTML5 学习笔记(一)——HTML5概要与新增标签
  19. [青海、甘南之行散记] 当风吹过高原,一颗心在说话
  20. 项目Beta冲刺(7/7)(追光的人)(2019.5.29)

热门文章

  1. 弹出打开蓝牙_iOS13隐藏特性 双蓝牙音频共享功能详解
  2. Java的switch case 语句
  3. (4)Spring框架----依赖注入(DI)
  4. TCP协议-socket通信
  5. Oracle 创建用户为什么要加C##
  6. SQL Server2012新特性
  7. R2B fpga flow script
  8. Ubuntu Emacs Fcitx 中文输入法设置
  9. C# ASP.NET里@的妙用
  10. 《C语言到底能干什么》1.3 窗口程序的编写