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的资料请关注代码网其它相关文章!
发表评论