详解MySQL实时同步到Oracle解决方案

1 需求概述

将MySQL5.6生产库多张表的数据实时同步到Oracle11g数据仓库,MySQL历史数据700G,平均每天产生50G左右日志文件,MySQL日志空间50G,超过后滚动删除日志文件。整个同步过程不可影响MySQL业务操作。

2 技术原理

采用灵蜂数据集成软件BeeDI将MySQL数据实时同步到Oracle,通过ETL全量同步历史数据,通过日志解析方式实时同步增量数据。

受限于日志空间,如果将所有历史数据一次性同步,需要的时间会超过一天,全量同步过程产生的日志会被删除,造成实时日志解析任务数据缺失,所以需要分批同步历史数据,基本操作如下:

a 全量同步部分表。

b 在实时日志解析任务中添加已全量同步完成的表并启动任务,当MySQL和Oracle两端对应表数据一致时,停止日志解析任务。

重复上面a和b步骤,直到所有表都加入实时日志解析任务。

3 MySQL环境配置

3.1 创建用户

在主库创建同步用户,以用户sync为例,创建用户及权限分配语句如下:

CREATE USER 'sync'@'%' IDENTIFIED BY 'xxxxx';

GRANT SELECT,PROCESS,SUPER, REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'sync'@'%';

3.2 启用BinLog

查询主库日志开启状态及日志记录格式:

show variables like 'log_bin';

show variables like "%binlog_format%";

如果日志状态为OFF或日志记录格式不为ROW,则编辑my.ini文件,设置以下项目内容:

log-bin="xxxxxx" --开启日志

binlog_format="ROW" --日志记录格式

4 BeeDI同步操作

4.1 配置全量同步任务

在BeeDI中新建ETL作业,在【ETL模板属性】对话框的【映射属性】中设置【LOB装载】为绑定存储。

【LOB装载】用于指定Oracle LOB数据载入方式,定位存储通过定位LOB指针更新LOB内容,绑定存储通过参数绑定方式更新LOB内容。

为优化数据抽取性能,建议在抽取组件的【选项】对话框中设置【异步】抽取模式。

为优化数据加载性能,建议在装载组件的【选项】对话框中选择【批量】装载模式。

全量同步任务配置完成如下

按照以上方式,创建多个ETL作业,其中每个ETL作业对应一张同步表。

4.2 配置实时日志解析任务

实时解析任务使用一个脚本作业,在其中指定所有要同步的表,脚本代码如下

4.3 执行全量同步任务

选中要执行的全量同步作业,点击工具栏【启动】按钮,可以同时启动多个全量同步作业,只要生产库资源及BeeDI所在机器资源充足。

4.4 执行实时日志解析任务

当所有全量同步作业运行结束后,编辑实时任务脚本,在变量cdc_tables中指定已经全量同步完成的表;在inquireLog函数参数中设置日志捕获起始点,可将最先运行的全量同步作业的启动时间指定为日志捕获起始点,日志捕获点只需在任务初次执行时设置一次,以后任务运行将自动管理日志捕获点。

在【调度窗口】通过快捷菜单【添加】把将要执行的实时日志解析作业载入,选中调度窗口的实时作业,点击工具栏【定时】按钮,设置按秒定时,运行周期1秒。

实时任务运行后,在日志窗口输出MySQL数据库日志解析信息,包含每分钟读取的日志记录,最近解析日志时间点。

4.5 添加更多同步表

当实时任务对应的作业状态频繁出现定时图标时,表明任务进入实时状态,此时MySQL源表和Oracle目标表数据一致,停止实时日志解析任务,配置运行其它表的全量同步任务(参考4.1和4.3)。当全量任务结束后,编辑实时日志解析任务,增加已全量同步完成的其他表,启动实时任务(参考4.2和4.4)。

5 效验同步数据一致性

依次在源库和目标库执行 select count(*) from [表] 比较表记录数是否相等。

依次在源库和目标库执行 select sum([数值列]) from [表] 比较指定字段算术和是否相等。

到此这篇关于详解MySQL实时同步到Oracle解决方案的文章就介绍到这了,更多相关MySQL实时同步到Oracle内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • mysql、oracle默认事务隔离级别的说明

    1.事务的特性(ACID) (1)原子性(Atomicity).事务中所涉及的程序对数据库的修改操作要么全部成功,要么全部失败. (2)一致性(Consistency).事务执行前和执行后来源和去向保持平衡. (3)隔离性(Isolation).并发时每个事务是隔离的,相互不影响. (4)持久性(Durubility).一旦事务成功提交,应该保证数据的完整存在. 2.事务隔离级别 (1)read uncommitted 未提交读 所有事务都可以看到没有提交事务的数据. (2)read commi

  • 详解Mysql和Oracle之间的误区

    本质区别 Oracle数据库是一个对象关系数据库管理系统(收费) MySQL是一个开源的关系数据库管理系统(免费) 数据库的安全性 mysql使用三个参数来验证用户,即用户名,密码和位置 Oracle使用了更多的安全功能,如用户名,密码,配置文件,本地身份验证,外部身份验证,高级安全增强功能等 权限 MySQL的权限系统是通过继承形成的分层结构.权限授于高层时,其他低层隐式继承被授于的权限,当然低层也可改写这些权限. 按授权范围不同,MySQL有以下种授权方式: 1.全局: 2.基于每个主机:

  • 浅谈Mysql、SqlServer、Oracle三大数据库的区别

    一.MySQL 优点: 体积小.速度快.总体拥有成本低,开源: 支持多种操作系统: 是开源数据库,提供的接口支持多种语言连接操作 : MySQL的核心程序采用完全的多线程编程.线程是轻量级的进程,它可以灵活地为用户提供服务,而不过多的系统资源.用多线程和C语言实现的mysql能很容易充分利用CPU: MySql有一个非常灵活而且安全的权限和口令系统.当客户与MySql服务器连接时,他们之间所有的口令传送被加密,而且MySql支持主机认证: 支持ODBC for Windows, 支持所有的ODB

  • mysql类似oracle rownum写法实例详解

    rownum是oracle才有的写法,rownum在oracle中可以用于取第一条数据,或者批量写数据时限定批量写的数量等 mysql取第一条数据写法 SELECT * FROM t order by id LIMIT 1; oracle取第一条数据写法 SELECT * FROM t where rownum =1 order by id; ok,上面是mysql和oracle取第一条数据的写法对比,不过这只是rownum的一种用法,rownum还可以用于批量写数据 往t表批量写一万条数据:

  • mysql和oracle的区别小结(功能性能、选择、使用它们时的sql等对比)

    一.并发性 并发性是oltp数据库最重要的特性,但并发涉及到资源的获取.共享与锁定. mysql: mysql以表级锁为主,对资源锁定的粒度很大,如果一个session对一个表加锁时间过长,会让其他session无法更新此表中的数据. 虽然InnoDB引擎的表可以用行级锁,但这个行级锁的机制依赖于表的索引,如果表没有索引,或者sql语句没有使用索引,那么仍然使用表级锁. oracle: oracle使用行级锁,对资源锁定的粒度要小很多,只是锁定sql需要的资源,并且加锁是在数据库中的数据行上,不

  • Oracle更换为MySQL遇到的问题及解决

    迁移工具 测试时,使用powerdesinger进行表结构转换,使用Navicat进行数据导入. 生产环境数据量较大,会由数据组同事选用其他工具进行迁移,到时再行补充. 应用改造 添加mysql8.0驱动包 使用mysql-connector-java-8.0.15.jar,如果是maven管理,直接添加依赖: <!--MySql 驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>m

  • SpringBoot多数据库连接(mysql+oracle)的实现

    出于业务需求,有时我们需要在spring boot web应用程序中配置多个数据源并连接到多个数据库. 使用过Spring Boot框架的小伙伴们,想必都发现了Spring Boot对JPA提供了非常好的支持,在开发过程中可以很简洁的代码轻松访问数据库,获取我们想要的数据. 因此在这里,使用Spring Boot和JPA配置多个数据源的场景. 项目配置 在本文中,主要使用两个不同的数据库,分别为: mysql(springboot)[primary,优先搜寻该数据库]:mysql数据库,包含Us

  • MySQL版oracle下scott用户建表语句实例

    概述: Oracle scott用户下四张表,比较便于做实验,验证数据,现修改为MySQL版本 1.部门表 --dept 2.员工表 --emp 3.工资等级表 --salgrade 4.奖金表 --bonus dept -- Create table create table DEPT ( deptno INT(2) not null, dname VARCHAR(14), loc VARCHAR(13) ) engine=InnoDB charset=utf8; -- Create/Recr

  • MyBatis JdbcType 与Oracle、MySql数据类型对应关系说明

    1. Mybatis JdbcType与Oracle.MySql数据类型对应列表 Mybatis JdbcType Oracle MySql JdbcType ARRAY JdbcType BIGINT BIGINT JdbcType BINARY JdbcType BIT BIT JdbcType BLOB BLOB BLOB JdbcType BOOLEAN JdbcType CHAR CHAR CHAR JdbcType CLOB CLOB CLOB–>修改为TEXT JdbcType C

  • 详解MySQL实时同步到Oracle解决方案

    1 需求概述 将MySQL5.6生产库多张表的数据实时同步到Oracle11g数据仓库,MySQL历史数据700G,平均每天产生50G左右日志文件,MySQL日志空间50G,超过后滚动删除日志文件.整个同步过程不可影响MySQL业务操作. 2 技术原理 采用灵蜂数据集成软件BeeDI将MySQL数据实时同步到Oracle,通过ETL全量同步历史数据,通过日志解析方式实时同步增量数据. 受限于日志空间,如果将所有历史数据一次性同步,需要的时间会超过一天,全量同步过程产生的日志会被删除,造成实时日志

  • 一文详解MySQL主从同步原理

    目录 1. MySQL主从同步实现方式 2. MySQL主从同步的作用 一主多从架构 双主多从架构 3. 主动同步的原理 4. 主从同步延迟问题 主从同步延迟的原因有哪些? 主从同步延迟的解决方案? 5. 如何提升主从同步性能 从库开启多线程复制 修改同步模式,改为异步 修改从库Bin Log配置 知识点总结 1. MySQL主从同步实现方式 MySQL主从同步是基于Bin Log实现的,而Bin Log记录的是原始SQL语句. Bin Log共有三种日志格式,可以binlog_format配置

  • 详解MySQL双活同步复制四种解决方案

    对于数据实时同步,其核心是需要基于日志来实现,是可以实现准实时的数据同步,基于日志实现不会要求数据库本身在设计和实现中带来任何额外的约束. 基于MySQL原生复制主主同步方案  这是常见的方案,一般来说,中小型规模的时候,采用这种架构是最省事的. 两个节点可以采用简单的双主模式,并且使用专线连接,在master_A节点发生故障后,应用连接快速切换到master_B节点,反之也亦然.有几个需要注意的地方,脑裂的情况,两个节点写入相同数据而引发冲突,同时把两个节点的auto_increment_in

  • 详解Mysql主从同步配置实战

    1.Introduction 之前写过一篇文章:Mysql主从同步的原理. 相信看过这篇文章的童鞋,都摩拳擦掌,跃跃一试了吧? 今天我们就来一次mysql主从同步实战! 2.环境说明 os:ubuntu16.04 mysql:5.7.17 下面的实战演练,都是基于上面的环境.当然,其他环境也大同小异. 3.进入实战 工具 2台机器: master IP:192.168.33.22 slave  IP:192.168.33.33 master机器上的操作 1.更改配置文件 我们找到文件 /etc/

  • 详解Mysql如何实现数据同步到Elasticsearch

    目录 一.同步原理 二.logstash-input-jdbc 三.go-mysql-elasticsearch 四.elasticsearch-jdbc 五.logstash-input-jdbc实现同步 六.go-mysql-elasticsearch实现同步 七.elasticsearch-jdbc实现同步 一.同步原理 基于Mysql的binlog日志订阅:binlog日志是Mysql用来记录数据实时的变化 Mysql数据同步到ES中分为两种,分别是全量同步和增量同步 全量同步表示第一次

  • 详解mysql跨库查询解决方案

    1.第一种跨库查询,是在同一个mysql服务器下两个不同的数据库之间的联查,关系如下图 在同一个mysql服务器下,不同的两个数据直接加上库名就可以实现跨库查询了 select * from t_test1 t1, test2.t_test2 t2 where t1.id = t2.id 执行sql查询到一下结果 2.第二种跨库查询,是在两台不同服务器(物理服务器)上分别安装的mysql服务器,实现跨库查询,其实现原理类似一个虚拟映射,需要用到mysql的另一个存储引擎Federated,FED

  • 详解MySQL的半同步

    前言 年后在进行腾讯二面的时候,写完算法的后问的第一个问题就是,MySQL的半同步是什么?我当时直接懵了,我以为是问的MySQL的两阶段提交的问题呢?结果确认了一下后不是两阶段提交,然后面试官看我连问的是啥都不知道,就直接跳过这个问题,直接聊下一个问题了.所以这次总结一下这部分的知识内容,文字内容比较多,可能会有些枯燥,但对于这方面感兴趣的人来说还是比较有意思的. MySQL的主从复制 我们的一般在大规模的项目上,都是使用MySQL的复制功能来创建MySQL的主从集群的.主要是可以通过为服务器配

  • 详解 Mysql 事务和Mysql 日志

    事务特性 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节. 2.一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 .比如A向B转账,不可能A扣了钱,B却没收到. 3.隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰.比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账. 4.持久性(Durability):事务完成后,事务对数据库的所有更新

  • 详解mysql中的存储引擎

    mysql存储引擎概述 什么是存储引擎? MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能. 例如,如果你在研究大量的临时数据,你也许需要使用内存存储引擎.内存存储引擎能够在内存中存储所有的表格数据.又或者,你也许需要一个支持事务处理的数据库(以确保事务处理不成功时数据的回退能力). 这些不同的技术以及配套的相关

随机推荐