基于Linux环境实现Oracle goldengate远程抽取MySQL同步数据到MySQL
基于Linux环境实现Oracle goldengate远程抽取MySQL同步数据到MySQL
场景说明:
先有项目需要读取生产库数据,但是不能直接读取生产库数据,需要把生产数据同步到一个中间库,下游系统从中间库读取数据。
生产库mysql - OGG - 中间库 mysql
备注:中间库也可以是其Oracle或者其他数据库类型,为了方便处理,采用同类型数据库
ogg版本:ogg21.5
前提条件
Ogg18.1 remote capture要求mysql为5.7版本,只能从linux远程捕获mysql on windows or linux,且不支持DDL捕获。支持远程mysql为community/commerical版本。OGG抽取配置
远程捕获不支持DDL同步。远程捕获参考网址:
https://docs.oracle.com/en/middleware/goldengate/core/19.1/oggmp/oracle-goldengate-classic-mysql.html#GUID-A70C0798-CE2A-4938-A54E-16BD9BA415AE
https://docs.oracle.com/en/middleware/goldengate/core/21.3/gghdb/preparing-and-configuring-system-oracle-goldengate.html#GUID-DCEF7BEE-CCF0-4531-8266-36F15105EDFA通常,从站应用的事务会记录到中继日志中,而不是从站的二进制日志中。
要使从属服务器在其二进制日志中写入从属服务器从属服务器接收的事务,
必须将 my.cnf 中的 log-slave-updates 选项作为 1 与 Oracle GoldenGate
的其他二进制日志记录参数一起启动复制从属服务器。在主节点的事务进入从节点的二进制日志后,
您可以在节点上设置常规的 Oracle GoldenGate 捕获,以捕获和处理节点的二进制日志。
准备工作 源端创建OGG应用用户
--源端创建OGG同步用户(测试环境)
CREATE USER 'ogguser_s'@'10.10.xx.xx' IDENTIFIED BY 'Sjztdb#2023';
GRANT ALL PRIVILEGES ON *.* TO 'ogguser_s'@'10.10.xx.xx' WITH GRANT OPTION;
FLUSH PRIVILEGES;--源端创建OGG同步用户(生产环境)
CREATE USER 'ogguser_s'@'10.128.xx.xx' IDENTIFIED BY 'Sjztdb#2023';
GRANT ALL PRIVILEGES ON *.* TO 'ogguser_s'@'10.128.xx.xx' WITH GRANT OPTION;
FLUSH PRIVILEGES;创建测试表:
create table mtab (mid int primary key,mname varchar(100),vdate date);
insert into mtab values(1001,'oggtomysql','2024-01-01');
准备工作 目标端创建ogg同步用户
-- 语法
dbhostname是OGG服务器地址
mysql > CREATE USER 'targetuser'@'dbhostname' IDENTIFIED BY 'password';
mysql > GRANT ALL PRIVILEGES ON *.* TO 'targetuser'@'dbhostname';
mysql > FLUSH PRIVILEGES;--创建用户并授权(测试环境)
CREATE USER 'ogguser_t'@'10.10.xx.xx' IDENTIFIED BY 'Sjztdb#2023';
GRANT ALL PRIVILEGES ON *.* TO 'ogguser_t'@'10.10.xx.xx';
FLUSH PRIVILEGES;ALTER USER 'ogguser_t'@'10.10.194.7' IDENTIFIED WITH mysql_native_password BY 'Sjztdb#2023';
flush privileges;--目标端数据库创建用户并授权(生产环境)
CREATE USER 'ogguser_t'@'10.128.xx.xx' IDENTIFIED BY 'Sjztdb#2023';
GRANT ALL PRIVILEGES ON *.* TO 'ogguser_t'@'10.128.xx.xx';
FLUSH PRIVILEGES;
ALTER USER 'ogguser_t'@'10.128.xx.xx' IDENTIFIED WITH mysql_native_password BY 'Sjztdb#2023';
flush privileges;--测试验证登录目标端数据库
dblogin sourcedb apvll@10.128.xx.xx:3306, userid ogguser_t, password Sjztdb#2023
安装OGG
--创建OGG目录
mkdir /data/ogg181_mysql
--解压OGG
unzip -d /data/ogg181_mysql/ ogg181mysql.zip
--配置别名
alias mggsci='/data/ogg181_mysql/ggsci'
--创建OGG目录
create subdirs
MGR 进程配置
GGSCI (oggser) 2> view param mgrport 7920
dynamicportlist 7920-7925
AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS,MINKEEPDAYS 3
ACCESSRULE, PROG *, IPADDR 10.10.*.*, ALLOW
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
--确认OGG能远程连接到mysql
--测试验证登录源端数据库
dblogin sourcedb ap@10.128.3x.xx:3306, userid ogguser_s, password Sjztdb#2023GGSCI (oggsend-194-7) 2> dblogin sourcedb ap@10.128.3x.xx:3306, userid ogguser_s, password Sjztdb#2023
Successfully logged into database.创建OGG登录别名
配置用户凭证
add credentialstore
alter credentialstore add user ogguser_s@10.128.3x.xx:3306/apvll, password Sjztdb#2023 alias s_mysql1 ##源端
alter credentialstore add user ogguser_t@10.128.3x.xx:3306/apvll, password Sjztdb#2023 alias t_mysql2 ##目标端 测试别名登录
DBLOGIN SOURCEDB apvll@10.128.3x.xx:3306 USERIDALIAS s_mysql1
DBLOGIN SOURCEDB apvll@10.128.3x.xx:3306 USERIDALIAS t_mysql2
配置抽取进程
--添加进程
ADD EXTRACT eap, TRANLOG, BEGIN NOW
ADD EXTTRAIL ./dirdat/eb, EXTRACT eap--编辑参数 (生产配置)
EDIT PARAMS eapEXTRACT eap
sourcedb ap@10.128.3x.xx:3306, userid ogguser_s, password Sjztdb#2023
DISCARDFILE ./dirrpt/eap.dsc, APPEND, MEGABYTES 1024
DISCARDROLLOVER AT 05:30 ON MONDAY
TRANLOGOPTIONS ALTLOGDEST REMOTE
EXTTRAIL ./dirdat/eb
TABLE ap.arrival_;--删除抽取进程,如果需要
delete EXTRACT eap
配置应用进程
--添加应用进程
--1.目标端添加检查表(生产环境)
dblogin sourcedb ap@10.128.xx.xx:3306, userid ogguser_t, password Sjztdb#2023
ADD CHECKPOINTTABLE ap.ggcheck2--2.编辑参数(生产环境)
EDIT PARAMS rapREPLICAT rap
TARGETDB apvll@10.128.xx.xx:3306, userid ogguser_t, password Sjztdb#2023
DISCARDFILE ./dirrpt/rap.dsc, APPEND, MEGABYTES 1024
DISCARDROLLOVER AT 05:30 ON MONDAY
MAP ap.arrival_, TARGET ap.arrival_;--3.添加应用进程
ADD REPLICAT rap, EXTTRAIL ./dirdat/eb, CHECKPOINTTABLE ap.ggcheck2--4.删除应用进程
DELETE REPLICAT rap
数据初始化
-- 批量导出dbname数据库中多张表结构
mysqldump -uroot -pAa123456 -d --databases ap --tables arrival_ > db0408.sql//方式1:通过mysqldump导出导入的方式进行初始化--从源端导出数据
--导出某个表 (需要加入--master-data 记录导出时候的binlog日志文件和pos位置)
mysqldump -uroot -pAa123456 --master-data --databases apvll --tables apv_common_relation >/tmp/apv_common_relation.sqlmysqldump -uroot -pAa123456 --master-data --databases apvll --tables arrival_area_enter_out apv_result_common arrival_area_hour_info arrival_area_total_info > /tmp/newdata0409.sql--目标端导入数据//方式2:
--通过OGG初始化进程进行初始化
--编辑初始化抽取进程参数
edit param einit1extract einit1
sourcedb apvll@10.128.35.14:3306, userid ogguser_s, password Sjztdb#2023
TRANLOGOPTIONS ALTLOGDEST REMOTE
rmthost 10.128.255.146, mgrport 7920
rmttask replicat, group rinit1
TABLE apvll.arrival_area_enter_out;--添加初始化抽取进程
add extract einit1, sourceistable--OGG服务器添加初始化应用进程
--编辑初始化应用进程参数
edit param rinit1replicat rinit1
TARGETDB apvll@10.128.103.38:3306, userid ogguser_t, password Sjztdb#2023
discardfile ./dirrpt/rinit1.dsc, purge
MAP apvll.arrival_area_enter_out, TARGET apvll.arrival_area_enter_out;--添加初始化应用进程
add replicat rinit1,specialrun--删除初始化进程
delete replicat rinit1
启动同步进程
--查看mysqldump导出文件的binlog位置和pos位置--CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.002414', MASTER_LOG_POS=767854389;-- 修改抽取进程开始抽取的日志文件和pos位置
ALTER EXTRACT eap,lognum 2414,logpos 767854389
--启动抽取进程
start eap
--启动应用进程
start rap
相关问题
问题1:启动抽取进程报错
2024-03-21 15:35:06 INFO OGG-01052 No recovery is required for target file ./dirdat/et000000000, at RBA 0 (filenot opened).2024-03-21 15:35:06 INFO OGG-01478 Output file ./dirdat/et is using format RELEASE 12.3/18.1.2024-03-21 15:35:06 INFO OGG-00182 VAM API running in single-threaded mode.2024-03-21 15:35:06 INFO OGG-01515 Positioning to begin time 2024 M03 21 15:34:26.
terminate called after throwing an instance of 'std::invalid_argument'what(): stol更换OGG版本为19.1,重新启动抽取进程出现如下提示2024-03-21 15:45:57 ERROR OGG-00146 Call to VAMInitialize returned with error status 600: VAM Client Report <CAU
SE OF FAILURE : Invalid argument: stol for log file: mysql-bin.000001�. Y logFileNameLen: 20, CheckSumLength: 0. Logfile name contains non numeric characters
WHEN FAILED : While reading log event from binary log
WHERE FAILED : MySQLBinLog Reader Module
CONTEXT OF FAILURE : No Information Available!>.更换版本为21.3版本之后正常启动。
问题2:启动应用进程报错
--问题
Process Abending : 2024-04-09 14:42:02.536013Oracle GoldenGate Delivery for MySQL process started, group rap discard file opened: 2024-04-09 14:51:53.977658
Current time: 2024-04-09 14:51:54
Discarded record from action ABEND on error 1403No data found
Aborting transaction on /OSdata/ogg213_mysql/dirdat/ed beginning at seqno 0 rba 2,171.error at seqno 0 rba 2171
Problem replicating apvll.arrival_area_enter_out to ap.arrival_
Record not found
Mapping problem with delete record (target format) SCN:000000000000000002414:000000616156738...
*
id = 0368072643414db9929565eff2aa2364
000000: 30 33 36 38 30 37 32 36 34 33 34 31 34 64 62 39 |0368072643414db9|
000010: 39 32 39 35 36 35 65 66 66 32 61 61 32 33 36 34 |929565eff2aa2364|*Process Abending : 2024-04-09 14:51:54.563740--检查处理 ,源端和目标端都未查询到该记录
mysql> select id from ap.arrival_ where id = '0368072643414db9929565eff2aa2364';
Empty set (0.01 sec)mysql> select id from ap.arrival_ where id = '0368072643414db9929565eff2aa2364';
Empty set (0.00 sec)--继续分析队列文件GGSCI (oggser- DBLOGIN as ogguser_t) 37> info rapReplicat rapLast Started 2024-04-09 14:51 Status ABENDED
Checkpoint Lag 00:00:00 (updated 00:26:29 ago)
Log Read Checkpoint File ./dirdat/ed000000000First Record RBA 1341./logdump open ./dirdat/ed000000000 Logdump 3 >pos 1341
----pos + RBA号,直接跳到这个记录上,这里为什么跳到1259呢?因为 info rap命令查询出来的结果告诉我们,1341 是他当前正在处理的事务。Logdump 4 >sfh 2024/04/09 14:42:00.877.974 Metadata Len 84 RBA 1341
Database Name: 3000 5000 0100 0200 0100 0200 4600 0100 0400 0000 | 0.P.........F....... 0000 0200 0400 0200 0000 0300 0700 0500 656e 5f55 | ................en_U 5304 000f 000d 0041 7369 612f 5368 616e 6768 6169 | S......Asia/Shanghai 0500 1400 1000 0000 1112 1122 2211 1112 1111 1111 | ...........""....... 1111 1111 | ....
Logdump 5 >N2024/04/09 14:42:00.877.975 Metadata Len 616 RBA 1476
Table Name: ap.arrival_3040 6202 0000 0100 0200 0b00 0200 0a00 0100 0600 | 0@b................. 0100 0200 0100 0340 4802 0000 0a00 3200 3000 0200 | .......@H.....2.0... 6964 4000 6000 0000 6000 0000 6000 0000 0000 0000 | id@.`...`...`....... 0000 0000 0000 0000 0000 0000 fd00 0000 0000 0000 | .................... 0000 0000 2300 3700 3500 0700 7061 726b 5f69 6440 | ....#.7.5...park_id@ 0060 0000 0060 0000 0060 0000 0000 0000 0000 0000 | .`...`...`.......... 0065 0000 0000 0000 00fd 0000 0000 0000 0000 0000 | .e..................
Logdump 6 >--分析可能的原因:
是因为没有指定抽取进程开始抽取的pos号,所以抽取进程把之前的操作记录也都抽取了,所以之前的记录都已经没有了
相关文章:
基于Linux环境实现Oracle goldengate远程抽取MySQL同步数据到MySQL
基于Linux环境实现Oracle goldengate远程抽取MySQL同步数据到MySQL 场景说明: 先有项目需要读取生产库数据,但是不能直接读取生产库数据,需要把生产数据同步到一个中间库,下游系统从中间库读取数据。 生产库mysql - OGG - 中间库…...

电子电路原理第十六章(负反馈)
1927年8月,年轻的工程师哈罗德布莱克(Harold Black)从纽约斯塔顿岛坐渡轮去上班。为了打发时间,他粗略写下了关于一个新想法的几个方程式。后来又经过反复修改, 布莱克提交了这个创意的专利申请。起初这个全新的创意被认为像“永动机”一样愚蠢可笑,专利申请也遭到拒绝。但…...
Go语言数组的定义与操作 - 《Go语言实战指南》
在 Go 语言中,数组(Array) 是一种定长、同类型的集合。它在内存中是连续分布的,适合用于性能敏感的场景。 一、数组的定义 数组的基本语法如下: var 数组名 [长度]元素类型 示例: var nums [5]int …...
物联网简介:万物互联的未来图景
物联网简介:万物互联的未来图景 引言 在科技飞速发展的今天,我们身边的一切似乎都在悄然发生变化。从清晨智能闹钟根据你的睡眠状态自动唤醒,到厨房里的咖啡机在你起床前已经煮好咖啡;从城市交通系统通过实时数据优化红绿灯时长…...

命令拼接符
Linux多命令顺序执行符号需要记住5个 【|】【||】【 ;】 【&】 【&&】 ,在命令执行里面,如果服务器疏忽大意没做限制,黑客通过高命令拼接符,可以输入很多非法的操作。 ailx10 网络安全优秀回答者 互联网…...

【通用智能体】Lynx :一款基于终端的纯文本网页浏览器
Lynx :一款基于终端的纯文本网页浏览器 一、Lynx简介二、应用场景及案例场景 1:服务器端网页内容快速查看场景 2:网页内容快速提取场景 3:表单提交与自动化交互场景 4:网络诊断与调试场景 5:辅助工具适配 三…...

51单片机的lcd12864驱动程序
#include <reg51.h> #include <intrins.h>#define uchar...

GStreamer (三)常⽤插件
常⽤插件 1、Source1.1、filesrc1.2. videotestsrc1.3. v4l2src1.4. rtspsrc和rtspclientsink 2、 Sink2.1. filesink2.2. fakesink2.3. xvimagesink2.4. kmssink2.5. waylandsink2.6. rkximagesink2.7. fpsdisplaysink 3 、视频推流/拉流3.1. 本地推流/拉流3.1.1 USB摄像头3.1…...
Java POJO接收前端null值设置
在 Java 中,若要让 price 字段接收前端传递的 null 值,只需确保以下几点: 1. 使用包装类型 Double 你的 price 字段已经是包装类型 Double(而不是基本类型 double),这天然支持 null 值。基本类型 double …...
详细总结和讲解redis的基本命令
Redis 是一个开源的内存数据结构存储系统,它可以用作数据库、缓存和消息中间件。Redis 支持多种类型的数据结构,如字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Se…...
Linux 内核等待机制详解:prepare_to_wait_exclusive 与 TASK_INTERRUPTIBLE
1. prepare_to_wait_exclusive 函数解析 1.1 核心作用 prepare_to_wait_exclusive 是 Linux 内核中用于将进程以独占方式加入等待队列的关键函数,其主要功能包括: 标记独占等待:通过设置 WQ_FLAG_EXCLUSIVE 标志,表明此等待条目是独占的。 安全入队:在自旋锁保护下,将条…...
蓝桥杯2300 质数拆分
问题描述 将 2022 拆分成不同的质数的和,请问最多拆分成几个? 01背包问题 #include<iostream> #include<cmath> #include<algorithm> using namespace std;int prime[2025]; int dp[2025]; //dp[j]:和为 j 时的最多拆分…...

软件架构风格系列(2):面向对象架构
文章目录 引言一、什么是面向对象架构风格1. 定义与核心概念2. 优点与局限性二、业务建模:用对象映射现实世界(一)核心实体抽象1. 员工体系2. 菜品体系 (二)封装:隐藏实现细节 三、继承实战:构建…...
ngx_http_random_index_module 模块概述
一、使用场景 随机内容分发 当同一目录下存放多份等价内容(如多张轮播图、不同版本静态页面等)时,可通过随机索引实现负载均衡或流量分散。A/B 测试 通过目录请求自动随机分配用户到不同测试组,无需后端逻辑参与。动态“首页”选…...

go-zero(十八)结合Elasticsearch实现高效数据检索
go-zero结合Elasticsearch实现高效数据检索 1. Elasticsearch简单介绍 Elasticsearch(简称 ES) 是一个基于 Lucene 库 构建的 分布式、开源、实时搜索与分析引擎,采用 Apache 2.0 协议。它支持水平扩展,能高效处理大规模数据的存…...

AM32电调学习解读九:ESC上电启动关闭全流程波形分析
这是第九篇,前面的文章把各个模块的实现都介绍了一轮,本章是从运行的角度结合波形图,把整个流程走一遍。 先看下一运行的配置,我把一些配置关闭了,这样跑起来会好分析一些,不同配置跑起来效果会有差异。使用…...
怎么打包发布到npm?——从零到一的详细指南
怎么打包发布到npm?——从零到一的详细指南 目录 怎么打包发布到npm?——从零到一的详细指南一、准备工作1. 注册 npm 账号2. 安装 Node.js 和 npm 二、初始化项目三、编写你的代码四、配置 package.json五、打包你的项目六、登录 npm七、发布到 npm八、…...
NX二次开发C#---遍历当前工作部件实体并设置颜色
该代码片段展示了如何在Siemens NX软件中使用C#进行自动化操作。通过NXOpen和UFSession API,代码首先获取当前工作部件,并遍历其中的所有实体。对于每个实体,代码检查其类型和子类型是否为“实体”,如果是,则将其颜色设…...
如何用体育数据做分析:从基础统计到AI驱动的决策科学
一、体育数据分析的演进与价值创造 体育数据分析已从简单的比分记录发展为融合统计学、计算机科学和运动科学的交叉学科。现代体育组织通过数据分析可以实现: 竞技表现提升:勇士队利用投篮热图优化战术布置 商业价值挖掘:曼联通过球迷行为数…...
09、底层注解-@Import导入组件
09、底层注解-Import导入组件 Import是Spring框架中的一个注解,用于将组件导入到Spring的应用上下文中。以下是Import注解的详细介绍: #### 基本用法 - **导入配置类** java Configuration public class MainConfig { // 配置内容 } Configuration Impo…...

【notes】VScode 使用总结
文章目录 扩展 c/cwindows7 系统下 c/c 自动升级导致的插件无法正常使用 设置 文件格式设置打开文件的默认格式 扩展 c/c windows7 系统下 c/c 自动升级导致的插件无法正常使用 问题 1. c/c扩展的1.25.x版本不再支持windows7 系统,当设置VScode自动升级拓展插件时…...

【论文阅读】KIMI K1.5: SCALING REINFORCEMENT LEARNING WITH LLMS
KIMI K1.5: SCALING REINFORCEMENT LEARNING WITH LLMS Scaling的解释: 通过系统性的方法扩展强化学习算法的能力,使其能够处理更复杂的问题、更大的状态/动作空间、更长的训练周期或更高效的资源利用 原文摘要: 研究背景与问题定位 传统预训…...
云服务器开发软件操作步骤
云服务器开发软件的主要步骤。通常,这包括选择云服务提供商、配置服务器环境、开发、测试、部署、维护等阶段。每个阶段都需要详细解释,可能需要分步骤说明。例如,选择云服务提供商时,需要考虑AWS、阿里云、腾讯云等,比…...

Qwen3 - 0.6B与Bert文本分类实验:深度见解与性能剖析
Changelog [25/04/28] 新增Qwen3-0.6B在Ag_news数据集Zero-Shot的效果。新增Qwen3-0.6B线性层分类方法的效果。调整Bert训练参数(epoch、eval_steps),以实现更细致的观察,避免严重过拟合的情况。 TODO: 利用Qwen3-0.6…...
4.6 sys模块
sys --- 仅作了解 面试之前冲击一下 python的垃圾回收机制 import sys # 1. api_version : 获取python的内部版本号 print(sys.api_version) #1013 # 2. copyright: 获取cpython的版本 print(sys.copyright) #3.getfilesystemencoding() getdefaultencoding():获…...

UWB定位方案在水力发电站人员安全的应用推荐
一、行业应用背景 水力发电站具有环境复杂(金属设备密集、高温高压区域多)、安全风险高(人员误入高危区域易引发事故)等特点,传统定位技术难以满足精度与可靠性要求。品铂科技基于UWB的高精度定位系统已在多…...
青少年编程与数学 02-019 Rust 编程基础 16课题、包、单元包及模块
青少年编程与数学 02-019 Rust 编程基础 16课题、包、单元包及模块 一、包1. **什么是 Crate?**2. **Crate 的类型**3. **Crate 的结构**4. **使用 Crate**5. **创建和管理 Crate**6. **发布 Crate**7. **Crate 的优势**8. **示例**创建一个 library crate 二、单元…...
bat 批处理获取日期、时间
在Windows批处理脚本编程中,获取当前日期和时间是一项常见且重要的操作。 1. 获取当前日期和时间的基本脚本 echo off for /F "tokens2" %%i in (date /t) do set mydate%%i set mytime%time% echo Current time is %mydate%:%mytime%输出示例ÿ…...
手写tomcat:基本功能实现(3)
TomcatRoute类 TomcatRoute类是Servlet容器,是Tomcat中最核心的部分,其本身是一个HashMap,其功能为:将路径和对象写入Servlet容器中。 package com.qcby.config;import com.qcby.Util.SearchClassUtil; import com.qcby.servlet…...
Spring Cloud Seata 快速入门及生产实战指南
文章目录 前言一、快速入门(AT模式)二、生产环境实战要点总结 前言 上一篇博客带大家深入解析Seata的核心原理及架构,理解了“为什么需要分布式事务”以及“Seata如何解决数据一致性问题”,相信大家已经对分布式事务的理论框架有…...