GoldenGate for mysql to mysql:单向同步

GoldenGate用于在各种企业系统间以亚秒级速度复制和集成事务数据,是同类最佳的、易于部署的产品。GoldenGate 可以灵活地在同类和异类系统(包括不同版本、不同的硬件平台)之间移动数据。

  Oracle 于 2009 年收购了 GoldenGate,我们可以看到在全球各行业超过 4,000 个解决方案中实施了 Oracle GoldenGate。该软件执行实时的、基于日志的更改数据捕获 (CDC),能够在异构数据库间以极低的延迟和很小的空间移动大量事务数据。

  GoldenGate TDM 是基于日志的实时CDC软件平台,提供异构环境下大量交易数据的实时捕捉、变换和投递,同时保持亚秒一级的数据延迟。

  基于GoldenGate TDM,我们提供高可用/容灾和实时数据集成的解决方案。

  GoldenGate TDM 采用高内聚低耦合的结构,能够支持多种拓扑结构,包括一对一,一对多,多对一,多对多,层叠和双向复制。

 

1:GoldenGate 工作原理

2:交易数据管理

  GoldenGate提供异构环境下交易数据的实时捕捉、变换、投递。

3:GoldenGate变化数据捕捉的优势

1:都提供基于日志的CDC

2:直接从数据库日志中通过自己的专有程序抽取数据

3:支持在备份系统上抓取变化数据

4:对一些数据类型如LONG,XML,BLOB都提供了支持

4:基于日志的实时数据复制

•亚秒级复制
•不依赖源数据库的触发器和规则,对源数据库影响小。

5:GG在数据传输方面的优势

1:GG有很好的机制来保证传输的交易一致性和断点续传。
2:事务完整性-事务级粒度
3:只复制成功提交的事务
4:防止源和目标的不一致性

实验:goldengate for mysql  to  mysql

(1)、点击下载 Oracle GoldenGate

ogg下载目录.png

(一)基础环境配置

  源库 目标库
操作系统版本 CentOS Linux release 7.4 CentOS Linux release 7.4
IP地址 192.168.10.11 192.168.10.12
数据库版本 社区版 5.7.24 社区版 5.7.24
需要同步的数据库 testdb(所有表) testdb_repl
GoldenGate版本 OGG-19.1.0.0.3 OGG-19.1.0.0.3

(二)MySQL数据库初始信息

  源库 目标库
MySQL安装位置(basedir) /usr/local/mysql /usr/local/mysql
数据存放位置    (datadir) /mysql/data /mysql/data
二进制日志位置 (log_bin) /mysql/binlog /mysql/binlog

(三)MySQL数据库开启二进制日志

要使用ogg抽取数据,必须开启二进制日志。在mysql的配置文件/etc/my.cnf中配置二进制日志,重启数据库生效。

[mysqld]

# binlog配置
server_id = 1
binlog_format=ROW
log_bin=/mysql/binlog/master-bin
sync_binlog=1 
expire_logs_days=1

(四)源端和目标端安装配置GoldenGate(源端和目标端都要执行

(4.1)源端和目标端创建安装ogg,实际上ogg并不需要安装,解压就可以使用

创建ogg安装路径

[root@masterdb ~]# mkdir /ogg

将安装包拷贝到该路径下解压:

[root@masterdb ogg]# ls
ggs_Linux_x64_MySQL_64bit.tar
[root@masterdb ogg]# tar -xvf ggs_Linux_x64_MySQL_64bit.tar 
./
./mysql_checklist.sql
...略
./libicuuc.so.56.1
[root@masterdb ogg]# ls
bcpfmt.tpl              emsclnt                        libggnnzitp.so        mysql.txt
bcrypt.txt              extract                        libggparam.so         notices.txt
cachefiledump           freeBSD.txt                    libggperf.so          oggerr
checkprm                ggcmd                          libggrepo.so          prvtclkm.plb
chkpt_mysql_create.sql  ggMessage.dat                  libicudata.so.56      replicat
convchk                 ggparam.dat                    libicudata.so.56.1    retrace
convprm                 ggsci                          libicui18n.so.56      reverse
db2cntl.tpl             ggs_Linux_x64_MySQL_64bit.tar  libicui18n.so.56.1    server
defgen                  help.txt                       libicuuc.so.56        sqlldr.tpl
demo_mysql_create.sql   keygen                         libicuuc.so.56.1      tcperrs
demo_mysql_insert.sql   lib                            libmysqlclient.so.18  ucharset.h
demo_mysql_load.sql     lib12                          libxerces-c-3.1.so    UserExitExamples
demo_mysql_misc.sql     libantlr3c.so                  logdump               usrdecs.h
dirout                  libdb-6.1.so                   mgr                   zlib.txt
dirwww                  libgglog.so                    mysql_checklist.sql

(4.2)使用ggsci创建ogg相关路径

[root@masterdb ogg]# pwd
/ogg
[root@masterdb ogg]# ./ggsci

Oracle GoldenGate Command Interpreter for MySQL
Version 12.2.0.2.2 OGGCORE_12.2.0.2.0_PLATFORMS_170630.0419
Linux, x64, 64bit (optimized), MySQL Enterprise on Jun 30 2017 06:32:17
Operating system character set identified as UTF-8.

Copyright (C) 1995, 2017, Oracle and/or its affiliates. All rights reserved.

GGSCI (masterdb) 1> create subdirs

Creating subdirectories under current directory /ogg

Parameter files                /ogg/dirprm: created
Report files                   /ogg/dirrpt: created
Checkpoint files               /ogg/dirchk: created
Process status files           /ogg/dirpcs: created
SQL script files               /ogg/dirsql: created
Database definitions files     /ogg/dirdef: created
Extract data files             /ogg/dirdat: created
Temporary files                /ogg/dirtmp: created
Credential store files         /ogg/dircrd: created
Masterkey wallet files         /ogg/dirwlt: created
Dump files                     /ogg/dirdmp: created

(五)源端配置GoldenGate(源端执行

(5.1)创建数据库用户ogg,该用户用来同步数据

mysql> GRANT ALL PRIVILEGES ON `testdb`.* TO 'ogg'@'%'IDENTIFIED BY 'ogg';

(5.2)配置管理进程mgr

GGSCI (masterdb) 1> edit param mgr
port 7809  
dynamicportlist 7840-7939  
purgeoldextracts /ogg/dirdat/*,usecheckpoints, minkeepdays 1 


GGSCI (masterdb) 2> start mgr
Manager started.


GGSCI (masterdb) 3> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING

(5.3)配置捕获进程exta

GGSCI (masterdb) 5> edit param exta
extract exta  
sourcedb testdb@192.168.10.11:3306 userid ogg password ogg  
exttrail /ogg/dirdat/ea
discardfile  /ogg/dirrpt/exta.dsc,append  
TranLogOptions AltLogDest /mysql/binlog/master-bin.index 
table testdb.*; 

GGSCI (masterdb) 10> add extract exta,tranlog,begin now  
EXTRACT added.

GGSCI (masterdb) 11> add exttrail /ogg/dirdat/ea,extract exta  
EXTTRAIL added.

(5.4)配置投递进程dmpa

GGSCI (masterdb) 15> edit param dmpa 
extract dmpa 
passthru  
sourcedb testdb@192.168.10.11:3306 userid ogg password ogg  
rmthost  192.168.10.12,mgrport 7809,compress  
rmttrail  /ogg/dirdat/da  
dynamicresolution  
numfiles 3000  
table testdb.*; 

GGSCI (masterdb) 16> add extract dmpa ,exttrailsource /ogg/dirdat/ea  
EXTRACT added.

GGSCI (masterdb) 17> add rmttrail /ogg/dirdat/da,extract dmpa 
RMTTRAIL added.

(5.5)创建表定义文件,传送到目标端

(5.5.1)创建表定义文件

GGSCI (masterdb) 23> edit param defgen  
defsfile ./dirdef/testdb.def  
sourcedb testdb@192.168.10.11:3306 userid ogg, password ogg  
table testdb.*;  

GGSCI (masterdb) 26> exit

(5.5.2)生成表定义

[root@masterdb ogg]# ./defgen paramfile ./dirprm/defgen.prm  

***********************************************************************
        Oracle GoldenGate Table Definition Generator for MySQL
      Version 12.2.0.2.2 OGGCORE_12.2.0.2.0_PLATFORMS_170630.0419
 Linux, x64, 64bit (optimized), MySQL Enterprise on Jun 30 2017 07:27:58
 
Copyright (C) 1995, 2017, Oracle and/or its affiliates. All rights reserved.


                    Starting at 2020-02-08 18:15:40
***********************************************************************

Operating System Version:
Linux
Version #1 SMP Tue Aug 22 21:09:27 UTC 2017, Release 3.10.0-693.el7.x86_64
Node: masterdb
Machine: x86_64
                         soft limit   hard limit
Address Space Size   :    unlimited    unlimited
Heap Size            :    unlimited    unlimited
File Size            :    unlimited    unlimited
CPU Time             :    unlimited    unlimited

Process id: 2510

***********************************************************************
**            Running with the following parameters                  **
***********************************************************************
defsfile ./dirdef/testdb.def
sourcedb testdb@192.168.10.11:3306 userid ogg, password ***
table testdb.*;
Expanding wildcard table specification testdb.*:

Retrieving definition for testdb.test01.
Retrieving definition for testdb.test02.
Retrieving definition for testdb.test03.


Definitions generated for 3 tables in ./dirdef/testdb.def.

(5.5.3)传送到目标端

[root@masterdb ogg]# scp /ogg/dirdef/testdb.def 192.168.10.12:/ogg/dirdef/
root@192.168.10.12's password: 
testdb.def                            100% 1785     1.9MB/s   00:00

(六)目标端配置GoldenGate(目标端执行

(6.1)创建数据库用户ogg,该用户用来同步数据

mysql> GRANT ALL PRIVILEGES ON `testdb_repl`.* TO 'ogg'@'%'IDENTIFIED BY 'ogg';

(6.2)配置管理进程mgr

GGSCI (slavedb) 3> edit param mgr
port 7809  
dynamicportlist 7840-7939  
purgeoldextracts /ogg/dirdat/*,usecheckpoints, minkeepdays 1 

GGSCI (slavedb) 5> start mgr
Manager started.

GGSCI (slavedb) 6> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING

(6.3)配置检查表

GGSCI (slavedb) 9> dblogin sourcedb testdb_repl@192.168.10.12:3306 userid ogg password ogg 
Successfully logged into database.

GGSCI (slavedb DBLOGIN as ogg) 10> add checkpointtable testdb_repl.checkpoint  

Successfully created checkpoint table testdb_repl.checkpoint.

GGSCI (slavedb DBLOGIN as ogg) 11> edit params ./GLOBALS 
checkpointtable testdb_repl.checkpoint

(6.4)配置应用进程repa

GGSCI (slavedb DBLOGIN as ogg) 13> edit params repa

replicat repa 
targetdb testdb_repl@192.168.10.12:3306 userid ogg password ogg  
handlecollisions  
sourcedefs /ogg/dirdef/testdb.def  
discardfile /ogg/dirrpt/repa.dsc,purge  
map testdb.*, target testdb_repl.*;

GGSCI (slavedb DBLOGIN as ogg) 16> add replicat repa,exttrail /ogg/dirdat/da,checkpointtable testdb_repl.checkpoint
REPLICAT added.

(七)导入初始化数据

将源库需要同步的表导出,然后导入到目标数据库

# 源库导出,并传到目标数据库服务器上
[root@masterdb ~]# mysqldump -uroot -p123456 -h192.168.10.11  --single-transaction --flush-logs --master-data=2 testdb  > testdb.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.

[root@masterdb ~]# ls
anaconda-ks.cfg  testdb.sql  wgetlog-02-05-20-22:27.log  wgetlog-02-05-20-22:28.log  wget.sh

[root@masterdb ~]# scp testdb.sql root@192.168.10.12:/root
root@192.168.10.12's password: 
testdb.sql                                                                                100%   15MB  68.9MB/s   00:00
# 目标数据库执行导入
[root@slavedb ~]# mysql -uroot -p123456 testdb_repl < testdb.sql 
mysql: [Warning] Using a password on the command line interface can be insecure.

(八)开启ogg同步进程

(8.1)源端开启捕获进程(源端执行

由于数据库数据一直在变化,所以对于导出的testdb.sql文件,我们需要记录二进制日志文件的log_file和log_pos

[root@slavedb ~]# cat testdb.sql |grep "CHANGE MASTER TO MASTER_LOG_FILE"
-- CHANGE MASTER TO MASTER_LOG_FILE='master-bin.000005', MASTER_LOG_POS=154;

然后从导出时的binlog开始抽取

GGSCI (masterdb) 5> alter extract exta,vam,lognum 5,logpos 154
EXTRACT altered.
GGSCI (masterdb) 6> start exta

Sending START request to MANAGER ...
EXTRACT EXTA starting

(8.2)开启投递进程(源端执行

GGSCI (masterdb) 19> start dmpa

Sending START request to MANAGER ...
EXTRACT DMPA starting

(8.3)开启应用进程(目标端执行

GGSCI (slavedb DBLOGIN as ogg) 18> start repa

Sending START request to MANAGER ...
REPLICAT REPA starting

(九)确认同步状态

(9.1)使用info all查看进程是否运行正常

所有进程状态为“running”代表正常

源端:

GGSCI (masterdb) 8> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING                                           
EXTRACT     RUNNING     DMPA        00:00:00      00:00:08    
EXTRACT     RUNNING     EXTA        00:00:00      00:00:04

如果状态不正常可以用以下命令查看原因

 查看日志:

view ggsevt

目标端replicat报错
 view report rt1

目标端:

GGSCI (slavedb DBLOGIN as ogg) 23> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING                                           
REPLICAT    RUNNING     REPA        01:14:40      00:00:0

(9.2)源端手动插入数据,查看目标端是否同步

源端执行:

insert into test03 values(1,'a');

目标端查看数据是否同步过来:

mysql> use testdb_repl ;
Database changed

mysql> select * from test03;
+-----+------+
| id3 | name |
+-----+------+
|   1 | a    |
+-----+------+
1 row in set (0.04 sec)

mysql:

create user 'oggadm1'@'%' identified by '123456';

grant all privileges on *.* to 'oggadm1'@'%';

flush privileges;

create database oggdb1;

 

exit

 rpm -q *odbc*

yum install mysql-connector-odbc.x86_64

cat /etc/odbcinst.ini #Mysql 驱动

 vim /etc/odbc.ini

[mysql]
Driver = MySQL #MySQL 是 /etc/odbcinst.ini
Server = 192.168.0.235
Port = 3306
User = oggadm1
Password = 123456
Database = oggdb1
Option = 3
Socket = /tmp/mysql.sock

测试:

 isql mysql

发布了216 篇原创文章 · 获赞 89 · 访问量 45万+

猜你喜欢

转载自blog.csdn.net/eagle89/article/details/104892601
今日推荐