mq同步mysql数据 duplicate entry_MySQL数据同步之otter

一、otter介绍

基于日志数据,用于MySQL或者ORACLE之间准实时同步数据。

用途:

mysql/oracle互相同步

中间表/行记录同步

二、原理及架构图

otter整体模块

manager (提供web页面进行同步管理)

arbitrate (分布式调度,可跨IDC机房)

node (同步过程setl)

canal / eromanga (同步数据来源)

大集群化部署

1个manager集群 + 多个IDC机房node组成

1. 基于Canal,获取数据库增量日志数据。 mq同步mysql数据 duplicate entry_MySQL数据同步之otter_第1张图片

2. 典型管理系统架构,manager(web管理)+node(工作节点)

    a. manager运行时推送同步配置到node节点

    b. node节点将同步状态反馈到manager上

3. 基于zookeeper,解决分布式状态调度的,允许多node节点之间协同工作.

4.目前支持MySQL-->MySQL  MySQL-->ORACLE等异库之间同步

三、需要安装包

https://github.com/alibaba/otter/releases

manager.deployer-4.2.18.tar.gz

node.deployer-4.2.18.tar.gz

(安装时候可能需要安装下载工具,下载后编译安装https://liquidtelecom.dl.sourceforge.net/project/aria2/stable/aria2-1.19.0/aria2-1.19.0.tar.gz)

canal.deployer-1.1.4.tar.gz

四、安装简要步骤

manager安装

1.otter manager依赖于mysql进行配置信息的存储,所以需要预先安装mysql,并初始化otter manager的系统表结构

    a. 安装mysql,这里不展开,网上一搜一大把

    b. 初始化otter manager系统表:

  2. 整个otter架构依赖了zookeeper进行多节点调度,所以需要预先安装zookeeper

    a. manager需要在otter.properties中指定一个就近的zookeeper集群机器

## otter manager domain name #修改为正确访问ip,生成URL使用

    otter.domainName = 127.0.0.1    

    ## otter manager http port otter.port = 8082 #按需调整默认8080

    ## jetty web config xml otter.jetty = jetty.xml

otter manager database config ,修改为正确数据库信息

otter.database.driver.class.name = com.mysql.jdbc.Driver

otter.database.driver.url = jdbc:mysql://127.0.01:3306/ottermanager

otter.database.driver.username = root

otter.database.driver.password = [email protected]

#zk地址

otter.zookeeper.cluster.default = 127.0.0.1:2181

访问:

mq同步mysql数据 duplicate entry_MySQL数据同步之otter_第2张图片

node安装

具体安装详见:https://github.com/alibaba/otter/wiki/Node_Quickstart

1. otter node会受otter manager进行管理,所以需要预先安装otter manager

2. 完成manager安装后,需要在manager页面为node定义配置信息,并生一个唯一id.

  a. nid配置 (将环境准备中添加机器后获取到的序号,保存到conf目录下的nid文件,比如我添加的机器对应序号为6)

3.node节点进行跨机房传输时,会使用到HTTP多线程传输技术,目前主要依赖了aria2c做为其下载客户端,后续会推出java版本.

    a. aria2 官方首页: http://aria2.sourceforge.net/

    b. 下载页面: http://sourceforge.net/projects/aria2/files/stable/

cancal安装

主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。

canal 作为MySQL binlog 增量获取和解析工具,可将变更记录投递到MQ 系统中,比如Kafka/RocketMQ。也可以直接把数据发送到es hbase等

具体参考:

https://github.com/alibaba/canal

我们配置一个同步任务:

操作步骤: 1.  添加数据库    

a. 源库 jdbc:mysql://localhost:3306     

b. 目标库 jdbc:mysql://localhost:3370

mq同步mysql数据 duplicate entry_MySQL数据同步之otter_第3张图片 

 2.  添加channel    

mq同步mysql数据 duplicate entry_MySQL数据同步之otter_第4张图片

说明:

a. 同步一致性

基于数据库反查 (简单点说,就是强制反查数据库,从binlog中拿到pk,直接反查对应数据库记录进行同步,回退到几天前binlog进行消费时避免同步老版本的数据时可采用)

基于当前日志变更 (基于binlog/redolog解析出来的字段变更值进行同步,不做数据库反查,推荐使用)

b. 同步模式

行模式 (兼容otter3的处理方案,改变记录中的任何一个字段,触发整行记录的数据同步,在目标库执行merge sql)

列模式 (基于log中的具体变更字段,按需同步)

c. 特殊组合:(同样支持)

基于数据库反查+列模式

基于当前日志变更+行模式

 3.  添加同步表信息     

          a. 源数据表 demo.t_yq    

          b. 目标数据表 demo_3370.t_yq

 4. 添加pipeline    

       a. 选择node节点     

       b. 选择canal

5. 添加同步映射规则    

      a. 定义源表和目标表的同步关系

mq同步mysql数据 duplicate entry_MySQL数据同步之otter_第5张图片 

 6. 启动

mq同步mysql数据 duplicate entry_MySQL数据同步之otter_第6张图片 

7. 测试数据

源端插入数据

mq同步mysql数据 duplicate entry_MySQL数据同步之otter_第7张图片 

mq同步mysql数据 duplicate entry_MySQL数据同步之otter_第8张图片

简单的介绍了otter使用,下期我们在看下双向同步以及canal同步数据到es

你可能感兴趣的:(mq同步mysql数据,duplicate,entry)