当前位置: 首页 > news >正文

基于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号,所以抽取进程把之前的操作记录也都抽取了,所以之前的记录都已经没有了

相关文章:

  • OceanBase 的系统变量、配置项和用户变量有何差异
  • 捌拾伍- 量子傅里叶变换 (3)
  • 数据结构进阶:AVL树与红黑树
  • C++23:ranges::iota、ranges::shift_left和ranges::shift_right详解
  • JavaScript性能优化实战(10):前端框架性能优化深度解析
  • 嵌入式EasyRTC音视频实时通话SDK在工业制造领域的智能巡检/AR协作等应用
  • 医学影像系统性能优化与调试技术:深度剖析与实践指南
  • sqli-labs靶场29-31关(http参数污染)
  • maven和npm区别是什么
  • CVPR2025 | 首个多光谱无人机单目标跟踪大规模数据集与统一框架, 数据可直接下载
  • 中文分词与数据可视化02
  • k8s监控方案实践补充(二):使用kube-state-metrics获取资源状态指标
  • mac中加载C++动态库文件
  • 6 任务路由与负载均衡
  • Linux进程信号(一)之信号的入门
  • Redis + ABP vNext 构建分布式高可用缓存架构
  • flutter缓存网络视频到本地,可离线观看
  • RabbitMQ ④-持久化 || 死信队列 || 延迟队列 || 事务
  • 排序算法之基础排序:冒泡,选择,插入排序详解
  • LabVIEW光谱检测系统
  • 圆桌丨新能源车超充技术元年,专家呼吁重视电网承载能力可能面临的结构性挑战
  • 百色一女子称家委会强制排班被迫抱婴儿校门口站岗?区教育局:自愿参与
  • 马上评丨火车穿村而过多人被撞身亡,亡羊补牢慢不得
  • 2025年上海科技节5月17日启动,56家重点实验室和大科学设施将向公众开放
  • 对话郑永年:我们谈判也是为世界争公义
  • 朝着解决问题的正确方向迈进——中美经贸高层会谈牵动世界目光