当前位置: 首页 > 编程笔记 >

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

柯阳曦
2023-03-14
本文向大家介绍详解MySQL实时同步到Oracle解决方案,包括了详解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内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!

 类似资料:
  • 本文向大家介绍详解MySQL双活同步复制四种解决方案,包括了详解MySQL双活同步复制四种解决方案的使用技巧和注意事项,需要的朋友参考一下 对于数据实时同步,其核心是需要基于日志来实现,是可以实现准实时的数据同步,基于日志实现不会要求数据库本身在设计和实现中带来任何额外的约束。 基于MySQL原生复制主主同步方案  这是常见的方案,一般来说,中小型规模的时候,采用这种架构是最省事的。 两个节点可以

  • 本文向大家介绍MySQL 整表加密解决方案 keyring_file详解,包括了MySQL 整表加密解决方案 keyring_file详解的使用技巧和注意事项,需要的朋友参考一下 说明 MySql社区版从5.7.11开始支持基于表的数据加密方案,模块名为keyring_file,支持加密整张表。这种是加密方式其实是基于文件加密的,一旦mysqld读取key启动后,将会解密整张表的数据,在mysql

  • 本文向大家介绍详解Django CAS 解决方案,包括了详解Django CAS 解决方案的使用技巧和注意事项,需要的朋友参考一下 CAS单点登录主要是为了解决主系统和子系统的统一登录问题,能够做到任意一个子系统登录成功后,再登录其他子系统后不再需要认证,让用户不用重复地进行登录认证。CAS单点登录的方案很多,并且大多数都是采用session的方式,而本文结合个人实践,着重讨论django cas

  • 本文向大家介绍oracle 临时表详解及实例,包括了oracle 临时表详解及实例的使用技巧和注意事项,需要的朋友参考一下 在Oracle8i或以上版本中,可以创建以下两种临时表: 1。会话特有的临时表 CREATE GLOBAL TEMPORARY <TABLE_NAME> ( <column specification> ) ON COMMIT PRESERVE ROWS;  2。事务特有的临

  • 本文向大家介绍MySQL死锁问题分析及解决方法实例详解,包括了MySQL死锁问题分析及解决方法实例详解的使用技巧和注意事项,需要的朋友参考一下 MySQL死锁问题是很多程序员在项目开发中常遇到的问题,现就MySQL死锁及解决方法详解如下: 1、MySQL常用存储引擎的锁机制 MyISAM和MEMORY采用表级锁(table-level locking) BDB采用页面锁(page-level lo

  • 本文向大家介绍mysql类似oracle rownum写法实例详解,包括了mysql类似oracle rownum写法实例详解的使用技巧和注意事项,需要的朋友参考一下 rownum是oracle才有的写法,rownum在oracle中可以用于取第一条数据,或者批量写数据时限定批量写的数量等 mysql取第一条数据写法 oracle取第一条数据写法 ok,上面是mysql和oracle取第一条数据的