首页 > 数据库 >MySQL增量同步工具OTTER

MySQL增量同步工具OTTER

时间:2022-12-21 14:36:19浏览次数:55  
标签:node 同步 配置 -- 增量 192.168 MySQL OTTER otter

背景:    

鉴于****项目中有使用Otter同步数据,同时重庆资源池ESOP也有同样的需求,之前采用的是Federated引擎来实现,但是爱可生RDS不支持该引擎,必须采用其他的工具来实现该需求,记录一下学习OTTER的过程。

一、 otter简介

基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库. 一个分布式数据库同步系统。

架构: 
  

组件:

Canal:MySQL binlog增量解析,提供增量数据消费和订阅,otter已集成。

manager:管理节点,WEB管理与监控

node:负责具体的任务处理

依赖:

JAVA >1.6.25

zookeeper

MySQL

aria2 (node跨机房传输时使用HTTP多线程传输技术,依赖aria2作为下载客户端)

 

二、环境规划

manager

192.168.73.104

8080、1099

zookeeper

192.168.73.104

2181

otter mysql

192.168.73.101

3306

node

192.168.73.101

2088

Source(主)

192.168.73.103

3307

Source(备)

192.168.73.104

3307

target

192.168.73.102

3307

 

三、otter manager安装步骤:

1、JDK、MySQL、Zookeeper安装(省略)

2、安装包下载

https://github.com/alibaba/otter/releases 下载对应的安装包并解压,建议二进制包即可。

https://github.com/alibaba/otter/blob/master/manager/deployer/src/main/resources/sql/otter-manager-schema.sql 获取元数据

3、otter manager安装

tar zxvf manager.deployer-4.2.18.tar.gz -C otter_manager/

4、元数据导入(node节点执行,省略)

5、otter manager配置(重要配置)

otter.domainName = 192.168.73.104

otter.port = 8080 #WEB端口

otter.database.driver.url = jdbc:mysql://192.168.73.101:3306/otter #otter数据库配置

otter.database.driver.username = otter

otter.database.driver.password = Otter@2020

otter.communication.manager.port = 1099 #manager端口,与node通信

otter.zookeeper.cluster.default = 192.168.73.104:2181 #zk配置

6、启动并验证

./startup.sh

netstat -tlnup|grep 8080查看端口是否正常

http://192.168.73.104:8080/ 能正常打开说明正常,管理员账号密码:admin/admin

 

四、otter node安装步骤

1、node安装

tar zxvf node.deployer-4.2.18.tar.gz -C otter_node/

2、node 配置(重要配置)

otter.manager.address = 192.168.73.104:1099

3、生成node id

在WEB管理端--机器管理--zookeeper管理,添加安装的zookeeper 
  

在WEB管理端--机器管理--node管理,添加node节点信息--保存 
  

  

4、配置node id

echo 1 > conf/nid

5、启动node

./startup.sh

netstat -tlnup|grep 2088 查看端口是否正常

WEB管理端--机器管理--node管理页面,查看node状态是否为已启动

 

五、同步任务配置(单向同步任务)

1、配置canal

数据库地址:是源端的IP:PORT。

其他信息可以后期更改。 
  

2、数据源配置

输入源端和目标端MySQL的信息 
  

3、添加表配置

添加源表和目标表 
  

4、在同步管理中配置Channel

行模式:整行记录同步

列模式:根据binlog中变更的具体字段,按需同步 
  

5、添加pipeline

点击刚刚新增的Channel,配置pipeline 
  

 

6、配置映射关系

点击刚刚添加的pipeline,配置映射关系--配置同步的字段等 
  

 

7、导出源表数据到目标表、记录位点信息并配置

{"journalName":"bin-log.000029","position":8254691,"timestamp":0,"gtid":"aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa:1-5533:1001480-1001579,d41f6cc1-9fc2-11ea-925d-000c293ddb5b:1-43"}; 
  

TIPS:字符集这里不能设置为UTF8MB4,这里并不是数据库的字符集,是获取binlog时候用的字符集。

8、新增第二张同步的表

假设新增的表为空表,在源端建表。

a、在配置管理--数据表配置,添加新增的表。

b、在同步管理中现停用channel通道,然后在channel管理--pipeline管理--映射关系列表中添加映射关系。

c、启动channel通道,观察日志

假设新增的表不空,建议在源端将该表设置为只读,然后在按照步骤添加;或者另新增canal、channel等。

 

六、主备源配置

1、配置管理-主备配置

添加主备数据库信息 
  

2、canal配置

数据库地址:添加主库信息

HA机制:选择media

media group key:输入主备配置处的key值 
  

    

3、数据源配置

URL:配置为jdbc:mysql://groupKey=1(1为主备配置中的key值) 
  

4、其他配置参考《五、同步任务配置》中的2~7。

 

七、模拟主库故障

1、Channel配置中停用当前的同步任务。

2、在node03主库上新增一条记录,并关闭node03主库。

3、切换主备

配置管理--主备配置页面点击切换按钮 
  

4、推送新主给Channel

Channel管理页面点击推送 
  

5、查看同步状态与进度

Channel管理--Pipeline管理--监控--同步进度查看同步状态,可以发现已经切换到node04。 
  

TIPS:早期使用file:position作为同步起点时,主挂了,则只能重新在canal中重新配置起点。得益于GTID的集群唯一性,现在切换变得简单了。但是要想使用主备配置,从库必须开启log_slave_updates,否则主备切换时,会找不到对应的binlog。

 

 

八、注意事项

1、otter只支持ROW模式的数据同步,其他两种模式不支持

2、源库只支持mysql,目标库支持mysql和oracle

3、同步的表必须要有主键

4、支持部分ddl同步  (支持create table / drop table / alter table / truncate table / rename table / create index / drop index,其他类型的暂不支持,比如grant,create user,trigger等等),同时ddl语句不支持幂等性操作,所以出现重复同步时,会导致同步挂起,可通过配置高级参数:跳过ddl异常,来解决这个问题。

5、不支持带外键的记录同步

附录:

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

·  Channel:同步通道,单向同步中一个Pipeline组成,在双向同步中有两个Pipeline组成

·  DataMediaPair:根据业务表定义映射关系,比如源表和目标表,字段映射,字段组等

·  DataMedia : 抽象的数据介质概念,可以理解为数据表/mq队列定义

·  DataMediaSource : 抽象的数据介质源信息,补充描述DateMedia

·  ColumnPair : 定义字段映射关系

·  ColumnGroup : 定义字段映射组

·  Node : 处理同步过程的工作节点,对应一个jvm

标签:node,同步,配置,--,增量,192.168,MySQL,OTTER,otter
From: https://www.cnblogs.com/harda/p/16996186.html

相关文章

  • mysql-ibtmp1表空间暴涨
    1、在做****巡检时,发现生产主机xxxx上的临时独立表空间ibtmp1暴涨至200G,借此梳理关于临时表空间相关的点2、ibtmp1暴涨如何处理? 2.1简单说明 ibtmp1是非压缩的innodb......
  • Mysql高可用之MMM架构
    MMM(Master-MasterreplicationmanagerforMySQL)是一套支持双主故障切换和双主日常管理的脚本程序。MMM使用Perl语言开发,主要用来监控和管理MySQLMaster-Master(双主)复制,......
  • mysql系统日志 (binlog, redolog, undolog, errorlog, generallog, relaylog, slowque
    mysql系统日志(binlog,redolog,undolog,errorlog,generallog,relaylog,slowquerylog) 1.错误日志errorlog错误日志记录着mysqld服务在启动,停止,和运行过程中发......
  • mysql-MDL锁
    针对****生产环境上出现过一次关于MDL锁导致DDL等待锁失败而出现连接表失败,在本地进行MDL锁复现。初始化环境,有一个test01.t1表,进行模拟MDL锁等待id14(A)id15(B......
  • mysql-表碎片清理和表空间收缩
    根据****热计费项目生产环境上,ibd文件异常大,借机梳理表碎片清理和表空间收缩的知识点 1、碎片清理的好处 降低访问表时的IO,提高mysql性能,释放表空间降低磁盘空间使用......
  • 基于Springboot+Mybatis+mysql+element-vue高校就业管理系统
    @目录一、系统介绍二、功能展示1.用户登陆注册2.个人信息(学生端)3.查看企业岗位信息(学生端)4.我的应聘(学生端)5.学生信息管理(辅导员)6.三方协议书审核(辅导员)7.查看班级就业......
  • 基于Java springboot+mybatis+mysql实现的校园新闻系统
    @目录一、系统介绍二、功能展示1.主页2.登录以及注册3.普通用户对新闻咨询的编辑、发布和删除4.管理员对新闻的审核发布和撤销取消发布三、代码展示四、获取源码一、系统......
  • MySQL统计某个数据库中有多少张表
    在一些命令行下无法查看某个数据库一共有多少张表的时候,可以采用下面的SQL语句SQL语句SELECTcount(*)TABLES,table_schemaFROMinformation_schema.TA......
  • MySQL 索引的创建、删除
    MySQL中索引的创建有三种方法,索引的删除有两种方法。一、创建索引(1)使用createindex#1.创建普通索引createindex索引名on表名(列名[(限制索引长度)]);#2.创建......
  • mysql 查询重复/删除重复的记录[多字段]
    #####查询重复数据SELECTt.*FROMlike_usert,(SELECTuser_id,COUNT(user_id),dynamc_id,COUNT(dynamc_id)FROMlike_userGROUPBYuser_id,dynamc_idHA......