采用OGG Goldengate实现Oracle与MySQL之间的复制

本文永久地址:https://www.askmac.cn/archives/goldengate-oracle-mysql.html

 

采用OGG Goldengate实现Oracle与MySQL之间的复制

 

一、安装Goldengate

  1. 根据MySQL版本及操作系统版本,下载合适的MySQL安装介质,本例中操作系统为Windows XP,MySQL版本为1.42,因此,下载“Oracle GoldenGate V11.1.1.0.3 for MySQL 5.x on Windows 2003, 2008.zip”,文件大小约14MB;
  2. 将上述zip文件展开到OGG安装目录,本例为D:\Oracle\GGS11g_MySQL;
  3. 进入目录D:\Oracle\GGS11g_MySQL,执行“ggsci”进入OGG命令行,执行如下命令创建子目录:

Ggsci> create subdirs

  1. 在OGG命令行下执行如下命令,为OGG管理器命名:

Ggsci> EDIT PARAM ./GLOBALS

在文件中,添加如下一行,并保存:

MGRSERVNAME GGSMYSQL

  1. 配置OGG mgr参数:

Ggsci> EDIT PARAM MGR

在文件中,添加如下内容,并保存:

port 8809

DYNAMICPORTLIST 8840-8850

autorestart er *, retries 5, waitminutes 1

purgeoldextracts  /ggs/dirdat/*,usecheckpoints, minkeepdays 3

  1. 启动OGG mgr:

Ggsci> strat mgr

 

目标端Oracle数据库的Goldengate安装,除了介质不同,与上述安装步骤相同,在此不再赘述。

 

二、安装并准备MySQL数据库

  1. 下载并安装MySQL V5.1.42,本例中安装目录为D:\Oracle\MySQL5.1.42;
  2. 设置环境变量MYSQL_HOME,指向D:\Oracle\MySQL5.1.42;使得Goldengate EXTRACT进程可以根据这个环境变量找到MySQL配置文件ini(其他平台为my.conf);
  3. 在MySQL配置文件ini中设置下列参数:
    • 将log-bin设置为一个目录和日志文件格式,如下例日志文件名为00001、test.00002等,目录为“D:/Oracle/MySQL5.1.42/logs/test.bin”

log-bin=”D:/Oracle/MySQL5.1.42/logs/test.bin”

  • 设置max_binlog_size规定binary日志文件尺寸(以字节为单位),最小值应该为4096

max_binlog_size=10000000

  • 将binlog_format设置为ROW。设为ROW使得DML语句以binary格式记入日志,任何其他日志格式(mixed或statement)将引起EXTRACT进程停止。

binlog_format=row

  1. 重新启动MySQL服务器。
  2. 执行如下命令:

Shell> mysql –u root –p

Enter password: root

mysql> use test

Database changed

mysql> create table test1(id varchar(10) primary key, name varchar(20));

Query OK, 0 rows affected (0.06 sec)

 

 

三、配置Goldengate进程

在MySQL源端配置EXTRACT抽取进程和DATAPUMP数据泵进程。三个进程的参数文件样例如下。

  1. 源端添加EXTRACT进程exta:
    1. add extract exta, tranlog, begin now
    2. edit param exta

源端EXTRACT进程参数文件:

–日志捕获进程

extract exta
dboptions host localhost, connectionport 3306
sourcedb test, userid root, password root
exttrail ./dirdat/ea
–数据库对象

table TEST.TEST1;

  1. add exttrail ./dirdat/ea, extract exta, megabytes 10
  2. start exta
  3. info exta,确认状态为RUNNING,否则查找解决错误

 

  1. 源端添加Data Pump进程dmpa:
    1. add extract dmpa, exttrailsource ./dirdat/ea
    2. edit param dmpa

源端数据泵进程参数文件:

extract  dmpa
rmthost 127.0.0.1, mgrport 7809
rmttrail ./dirdat/ra
passthru
table TEST.TEST1;

 

  1. add rmttrail ./dirdat/ra, extract dmpa, megabytes 10
  2. start dmpa
  3. info dmpa, 确认状态为RUNNING,否则查找解决错误

 

  1. 在MySQL端生成def文件,复制到目标端
    1. Ggsci> edit param defgen

defsfile ./dirdef/mysql.def, purge

dboptions host localhost, connectionport 3306

sourcedb test, userid root, password root

table test.test1;

  1. Shell> defgen paramfile ./dirprm/defgen.prm
  2. 将生成的def文件ftp或复制到目标端Goldengate子目录dirdef下。

 

  1. 目标端添加应用进程repa:

本例中目标为Oracle数据库信息为127.0.0.1:1521:xe。数据库用户为test,目标表为ora_test1:

create table ora_test1(id varchar2(10) primary key, name varchar2(20));

  1. add replicat repa, exttrail ./dirdat/ra nodbcheckpoint
  2. edit param repa

目标段交付进程参数文件:

REPLICAT REPA

USERID goldengate, PASSWORD goldengate

SOURCEDEFS ./dirdef/mysql.def

ASSUMETARGETDEFS

DISCARDFILE ./dirrpt/ra.dsc, PURGE

MAP TEST.TEST1, TARGET test.ora_test1;

 

  1. start repa, 确认状态为RUNNING,否则查找解决错误。

 

四、测试Goldengate

  1. 执行如下命令,在MySQL表test1中插入三条记录:

Shell> mysql –u root –p

Enter password: root

mysql> use test

Database changed

mysql> insert into test1 values(‘1′,’User1’);

Query OK, 1 row affected (0.00 sec)

mysql> insert into test1 values(‘2′,’User2’);

Query OK, 1 row affected (0.02 sec)

mysql> insert into test1 values(‘3′,’User3’);

Query OK, 1 row affected (0.00 sec)

  1. 在目标端Oracle数据库上执行如下命令,查询是否同步了3条记录:

Shell> sqlplus test/test

SQL> select * from ora_test1;

 


Posted

in

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *