当前位置: 代码网 > it编程>数据库>Oracle > 基于OGG实现Oracle实时同步MySQL的全过程

基于OGG实现Oracle实时同步MySQL的全过程

2024年05月19日 Oracle 我要评论
1.架构设计2.ogg安装部署2.1 ogg for oracle1.ogg下载地址:https://www.oracle.com/middleware/technologies/goldengate

1.架构设计

2.ogg安装部署

2.1 ogg for oracle

1.ogg下载地址:
https://www.oracle.com/middleware/technologies/goldengate-downloads.html

创建ogg使用目录

chown -r oracle:oinstall /oraogg
chmod 775 -r /oraogg

2.环境变量如下

vi .bash_profile

export gg_home=/oraogg/goldengate
export path=$path:$home/bin:$oracle_home/bin:$gg_home
export ld_library_path=$oracle_home/lib:/lib:/usr/lib
alias ggsci='cd $gg_home;ggsci'

source .bash_profile

3.静默安装
cd /oraogg/fbo_ggs_linux_x64_oracle_shiphome/disk1/response
vi /oraogg/fbo_ggs_linux_x64_oracle_shiphome/disk1/response/oggcore.rsp

--只修改如下3个地方即可。
install_option=ora19c
software_location=/oraogg/goldengate
inventory_location=/u01/app/orainventory
/u01/app/oracle/product/19.3.0/db_1

使用如下命令静默安装:

/oraogg/fbo_ggs_linux_x64_oracle_shiphome/disk1/runinstaller -silent
-responsefile /oraogg/fbo_ggs_linux_x64_oracle_shiphome/disk1/response/oggcore.rsp

ogg初始化

cd /ogg
./ggsci
create subdirs

2.2 ogg for mysql

1.安装客户端

yum install https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
yum install mysql-community-server --nogpgcheck

2.创建oggm用户运行ogg for mysql软件,安装目录为/oggmysql

groupadd -g 1005 ogg
useradd -g ogg -u 1005 -m oggm
mkdir -p /oggmysql
chown oggm:ogg /oggmysql

3.解压缩安装

cd /oggmysql/
unizp 213000_ggs_linux_x64_mysql_64bit.zip
tar -xf ggs_linux_x64_mysql_64bit.tar
[root@ogg21all oggmysql]# ./ggsci -v
oracle goldengate command interpreter for mysql
version 21.3.0.0.0 oggcore_21.3.0.0.0_platforms_210728.1047
oracle linux 7, x64, 64bit (optimized), mysql on jul 28 2021 18:17:46
copyright © 1995, 2021, oracle and/or its affiliates. all rights reserved.

4.配置

su - oggm
$ /oggmysql/ggsci
ggsci (ogg21all) 1> create subdirs

5.环境变量设置

vi .bash_profile

export gg_home=/oggmysql
export path=$path:$home/bin:$gg_home
alias ggsci='cd $gg_home;ggsci'

source .bash_profile

3.oracle相关配置

3.1 参数调整

– oracle数据库配置

1.开启数据库归档–如果没有开启

2.开启数据库级别附加日志–如果没有开始最小附加日志

3.开启强制日志–如果没有开启强制日志

4.设置enable_goldengate_replicat参数为true

5.创建ogg用户包括包括源端用户、目标端用户以及ogg抽取用户

alter database add supplemental log data;
alter database add supplemental log data (all) columns;
alter database force logging;
alter system set enable_goldengate_replication=true;
##修改归档路径
mkdir -p /home/oracle/arch
sys@oradb> alter system set log_archive_dest_1=‘location=/home/oracle/arch';
system altered.
sys@oradb> archive log list
database log mode archive mode
automatic archival enabled
archive destination /u01/app/oracle/arch
oldest online log sequence 3
next log sequence to archive 5
current log sequence 5
sys@oradb> select name,supplemental_log_data_min , force_logging, log_mode from v$database;
name               supplemental_log force_logging     log_mode
------------------ ---------------- ----------------- ------------------------
orclcdb            yes              yes               archivelog
##关闭回收站
sql> show parameter recyclebin;
sql> alter system set recyclebin = off scope = spfile;
sql> show recyclebin;
sql> purge recyclebin;

3.2 新增用户

-- ogg管理用户
sys@oradb> alter session set container=orclpdb1;

create user ogg identified by oracle;
grant dba to ogg;
grant select any dictionary to ogg;
grant execute on sys.dbms_lock to ogg;
grant select any transaction to ogg;
grant select any table to ogg;
grant flashback any table to ogg;
grant alter any table to ogg;

exec dbms_goldengate_auth.grant_admin_privilege('ogg','*',true); 


-- 业务用户
create user rptuser identified by oracle;
grant dba to rptuser ;
grant select any dictionary to rptuser;
grant execute on sys.dbms_lock to rptuser;

4.mysql数据初始化

1.生成mysql端ddl语句
可以使用navicat的数据传输功能或其它工具直接从oracle端生成mysql类型的建表语句如下:

mysql -uroot -proot
create database rptdb;

mysql -uroot -proot -h 172.18.12.91 -d rptdb -f < ddl.sql


2.ddl语句如下
set names utf8; 
set foreign_key_checks = 0; 

drop table if exists `addresses`; 
create table `addresses` 
( `address_id` decimal(12, 0) not null, 
`customer_id` decimal(12, 0) not null, 
`date_created` datetime not null, 
`house_no_or_name` varchar(60) null, 
`street_name` varchar(60) null, 
`town` varchar(60) null, 
`county` varchar(60) null, 
`country` varchar(60) null, 
`post_code` varchar(12) null, 
`zip_code` varchar(12) null, 
primary key (`address_id`), 
index `address_cust_ix`(`customer_id` asc) 
);

----- table structure for card_details ----
drop table if exists `card_details`; 
create table `card_details` 
( `card_id` decimal(12, 0) not null, 
`customer_id` decimal(12, 0) not null, 
`card_type` varchar(30) not null, 
`card_number` decimal(12, 0) not null, 
`expiry_date` datetime not null, 
`is_valid` varchar(1) not null, 
`security_code` decimal(6, 0) null, 
primary key (`card_id`), 
index `carddetails_cust_ix`(`customer_id` asc) 
);


---- table structure for customers ----
drop table if exists `customers`; 
create table `customers` 
( `customer_id` decimal(12, 0) not null, 
`cust_first_name` varchar(40) not null, 
`cust_last_name` varchar(40) not null, 
`nls_language` varchar(3) null, 
`nls_territory` varchar(30) null, 
`credit_limit` decimal(9, 2) null, 
`cust_email` varchar(100) null, 
`account_mgr_id` decimal(12, 0) null, 
`customer_since` datetime null, 
`customer_class` varchar(40) null, 
`suggestions` varchar(40) null, 
`dob` datetime null, `mailshot` varchar(1) null, 
`partner_mailshot` varchar(1) null, 
`preferred_address` decimal(12, 0) null, 
`preferred_card` decimal(12, 0) null, 
primary key (`customer_id`), 
index `cust_account_manager_ix`(`account_mgr_id` asc), 
index `cust_dob_ix`(`dob` asc), 
index `cust_email_ix`(`cust_email` asc) 
);

5.oracle ogg设置

[root@ogg21all /]# su - oracle
[oracle@ogg21all ~]$ ggsci
ggsci (ogg21all) 2> edit params mgr
port 7809
add credentialstore
alter credentialstore add user ogg@172.18.12.90/oradb, password oracle alias ora19c
info credentialstore
ggsci (ogg21all) 7> info credentialstore
reading from credential store:
default domain: oraclegoldengate
alias: ora19c
userid: ogg@172.18.12.90/oradb
dblogin useridalias ora19c
add schematrandata rptuser
info schematrandata rptuser
list tables rptuser.*

6.mysql ogg设置

ggsci (ogg21all) 1> edit params mgr
port 8809
ggsci (ogg21all) 2> start mgr
manager started.
ggsci (ogg21all) 3> info all
program status group lag at chkpt time since chkpt
manager running

7.全量同步数据

oracle全量同步到mysql
注意:在此阶段,源端需要停业务,不能产生新数据。

-- oracle端
edit params ext0
extract ext0
useridalias ora19c
rmthost 127.0.0.1,mgrport 8809
rmttask replicat,group rep0
table rptuser.addresses;
table rptuser.card_details;
table rptuser.customers;

add extract ext0 ,sourceistable
delete extract ext0



-- mysql端
edit params rep0
replicat rep0
targetdb rptdb@172.18.12.91:3306 userid root password root
map rptuser.addresses, target rptdb.addresses;
map rptuser.card_details, target rptdb.card_details;
map rptuser.customers, target rptdb.customers;

add replicat rep0 ,specialrun
delete replicat rep0


-- 直接启动源端ext0即可,rep0不用启动,mgr会自动启动它,等同步结束,它会自动关闭
start ext0


-- 查看日志
info rep0,showch
view report rep0

--登录验证数据
mysql -uroot -proot -h 172.18.12.91 -d rptdb

mysql> select count(*) from addresses;
+----------+
| count(*) |
+----------+
|      150 |
+----------+
1 row in set (0.04 sec)

mysql> select count(*) from card_details;
+----------+
| count(*) |
+----------+
|      150 |
+----------+
1 row in set (0.05 sec)

mysql> select count(*) from customers;
+----------+
| count(*) |
+----------+
|      100 |
+----------+
1 row in set (0.04 sec)

ggsci (ogg21all as ogg@oradb) 21> info ext0

extract    ext0      last started 2023-11-25 18:58   status stopped
checkpoint lag       not available
log read checkpoint  table rptuser.customers
                     2023-11-25 18:58:46  record 100
task                 sourceistable

8.增量时实同步

8.1 oracle端

add extract exto integrated tranlog begin now
add exttrail ./dirdat/eo extract exto
dblogin useridalias ora19c
register extract exto database
edit params exto
extract exto
useridalias ora19c
tranlogoptions fetchpartiallob
exttrail ./dirdat/eo
table rptuser.addresses;
table rptuser.card_details;
table rptuser.customers;

启动exto

start exto
ggsci (ogg21all as ogg@oradb) 12> info all
program status group lag at chkpt time since chkpt
manager running
extract running exto 00:02:19 00:00:08

8.2 mysql端

edit params repm
replicat repm
targetdb rptdb@172.18.12.91:3306 userid root password root
map rptuser.addresses, target rptdb.addresses;
map rptuser.card_details, target rptdb.card_details;
map rptuser.customers, target rptdb.customers;
add rep repm, exttrail /oraogg/goldengate/dirdat/eo, nodbcheckpoint
delete rep repm
start repm

9.测试同步

1.oracle端测试产生数据
sys@oradb> delete from rptuser.addresses where address_id=150;

ggsci (ogg21all as ogg@oradb) 21> stats exto,total

sending stats request to extract group exto ...

start of statistics at 2023-11-25 19:36:13.

output to ./dirdat/eo:

extracting from rptuser.addresses to rptuser.addresses:

*** total statistics since 2023-11-25 19:25:02 ***
    total inserts                              0.00
    total updates                              0.00
    total deletes                              1.00
    total upserts                              0.00
    total discards                             0.00
    total operations                           1.00

end of statistics.

2.mysql端插入数据
mysql -uroot -proot -h 172.18.12.91 -d rptdb
mysql> select count(*) from addresses;

ggsci (ogg21all) 18> stats repm,total

sending stats request to replicat group repm ...

start of statistics at 2023-11-25 19:56:10.

replicating from rptuser.addresses to rptdb.addresses:

*** total statistics since 2023-11-25 19:54:49 ***
    total inserts                              0.00
    total updates                              0.00
    total deletes                              1.00
    total upserts                              0.00
    total discards                             0.00
    total operations                           1.00

end of statistics.

mysql> select * from addresses where address_id=150;
empty set (0.00 sec)

mysql> select database();
+------------+
| database() |
+------------+
| rptdb      |
+------------+
1 row in set (0.00 sec)

以上就是基于ogg实现oracle实时同步mysql的全过程的详细内容,更多关于oracle实时同步mysql的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com