zoukankan      html  css  js  c++  java
  • Goldengate 应用环境 mysql to oracle

    前言

    一个需求,mysql的某些表,实时同步至oracle,于是就产生了这篇文章,安装过程中,走了些弯路,原因是没太深刻理解,官方提供安装步骤所代表的意义。

    环境

    源端:mysql-server 5.5.39 , Goldengate for mysql 121210 , MySQL-client-5.5.28-1.linux2.6.x86_64.rpm , mysql-connector-odbc-5.2.7-1.el6.x86_64.rpm

    目标端:oracle10g,linux Goldengate 11_1_1

    注意:Goldengate版本的不一致,会存在兼容问题,比如抓取进程启动不了,投递进程也没发启动等,本环境就是基于不兼容,但官方提供了解决方法,详细过程,我会注明。

    开始吧,源端操作

    注意:mysql默认我用root账户做同步操作

    基础环境安装配置,详细安装不做阐述

        假设你已经安装好了mysql-server,并安装了MySQL-client-5.5.28-1.linux2.6.x86_64.rpm,mysql-connector-odbc-5.2.7-1.el6.x86_64.rpm

    Goldengate for mysql 121210 也已拷贝至mysql服务器.

    1.修改 vi /etc/my.cnf,添加如下参数

    [mysqld]
    log-bin=mysql-bin      --打开二进制文件,可以修改为其他路径 例子: /var/lib/mysql/hh-bin 
    max_binlog_size=4096
    binlog_format=row     --日志格式为行,这个很重要额,不然Goldengate,抓取进程没法启动
    socket=/tmp/mysql.sock  
    
    [client]
    socket=/tmp/mysql.sock 
    注意:这有一个很大的坑,添加后,需用grep "binlog_format" /etc/my.cnf 检查下是否有重复参数,其他做类似操作.


    2.创建 /usr/local/etc/odbc.ini 文件

    [ODBC Data Sources]
    OGGDB1 = MyODBC 3.51 Driver DSN
    
    OGGDB1
    Driver = /usr/lib64/libmyodbc5a.so  --对应的是mysql-connector-odbc-5.2.7-1.el6.x86_64.rpm这个包,rpm -ql mysql-connector-odbc-5.2.7-1.el6.x86_64.rpm 查看
    Description = Connector/ODBC 3.51 Driver DSN
    Server = localhost
    Port = 3306
    User = root
    Password = 111111
    Database = T
    Option = 3
    Socket = /tmp/mysql.sock

    3.创建列定义...重要  --这部应放在安装ggsci后执行

    [root@ramq2 gg]# vi dirprm/dsalesab.prm
    [root@ramq2 gg]# cat dirprm/dsalesab.prm
    DefsFile dirdef/dsalesab.def, Purge
    SourceDB T, UserID root, Password 111111
    Table T.*; 
    [root@ramq2 gg]# ./defgen  paramfile  dirprm/dsalesab.prm NOEXTATTR  --注意goldengate版本不一致,添加了NOEXTATTR选项

    scp dirdef/dsalesab.def oracle@192.168.1.105:/opt/oracle/gg/dirdef --拷贝生成的def文件至目标端,注意 以后新添加了表,也要重复这样做一次

    4.安装ggsci

    [root@ramq2 gg]# tar -xvf ggs_Linux_x64_MySQL_64bit.tar
    
    [root@ramq2 gg]# ./ggsci
    
    GGSCI (host02) 1> Create Subdirs 

    ggsci这样就安装结束了。

    5.配置mgr进程

    GGSCI (ramq2) 3> edit param mgr
    
    GGSCI (ramq2) 4> view param mgr
       port 7809   --添加端口

    6.配置抓取进程

    GGSCI (ramq2) 8> edit param et
    
    GGSCI (ramq2) 8> view param et
    Extract et   --抓取进程名字
    setenv (MYSQL_HOME="/usr/local/mysql")   --mysql家目录
    ExtTrail ./dirdat/ta, format release 11.1  --注意:format release 11.1 默认我版本不一致,才加载此选项,不然目标端,没法写入数据
    SourceDB T@localhost:3306, UserID root, Password 111111  --连接MySQL
    TranLogOptions AltLogDest  /usr/local/mysql/data/mysql-bin.index  --mysql索引日志文件
    Table T.*; --抓取的表
    GGSCI (host01) > Add Extract et , TranLog, Begin Now  --添加et进程
    EXTRACT added.
    
    GGSCI (host01) > Add ExtTrail ./dirdat/ta, Extract et, Megabytes 5  --添加抓取数据存放文件ta,抓取进程et操作,大小5m...可以适量加大
    EXTTRAIL added.

    7.配置传输进程

    GGSCI (ramq2) 9> edit param pt
    GGSCI (ramq2) 9> view param pt Extract pt RmtHost 192.168.1.105, MgrPort 7809, Compress --投递目标机gg RmtTrail ./dirdat/p5, format release 11.1 -- 创建目标端数据文件p5 注意: format release 11.1 ,解释同上 Passthru Table T.*;
    GGSCI (host01) > Add Extract pt, ExtTrailSource ./dirdat/ta  --从哪里取数据
    EXTRACT added.
    
    GGSCI (host01) > Add RmtTrail ./dirdat/p5, Extract pt, Megabytes 5  --添加目标端p5文件,要添加成功,目标端mgr也该启动,数据大小5m
    RMTTRAIL added.

    目标端操作

    假设oracle已安装好

    检查环境变量

    ORACLE_BASE=/opt/oracle             
    ORACLE_HOME=$ORACLE_BASE/102
    ORACLE_SID=orcl
    LD_LIBRARY_PATH=/opt/oracle/102/lib:$LD_LIBRARYPATH  --注意:不对,ggsci没法启动
    PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin
    
    export ORACLE_BASE ORACLE_HOME ORACLE_SID LD_LIBRARY_PATH  PATH

    1.安装ggsci,方法同上,不在啰嗦..

    配置mgr进程
    GGSCI (ramq2) 3> edit param mgr
    
    GGSCI (ramq2) 4> view param mgr
       port 7809   --添加端口

    添加全局配置文件
    GGSCI (gg) 387> edit param ./GLOBALS GGSCI (gg) 387> view param ./GLOBALS CHECKPOINTTABLE system.checkpointtable
    --为什么要添加呢?暂时想不起来了,但必须有,如果要做双向同步,另一方也需添加

    GGSCI (gg) 387> Dblogin userid system, password oracle

      GGSCI (gg) 387> Add checkpointtable  system.checkpointtable

     

    2.添加复制进程,目的是把传输过来的数据,取出,写入oracle

    GGSCI (gg) 389> view param rmy
    
    replicat rmy
    setenv (NLS_LANG=American_America.AL32UTF8) --对应mysql编码,不然中文乱码
    userid system,password 111111
    HANDLECOLLISIONS --数据结构的一致性,不然delete ,update ,进程就挂了
    --ASSUMETARGETDEFS --想要操作ddl 就开启把
    SourceDefs dirdef/dsalesab.def  --还记得源端生成的def文件吗
    discardfile ./dirrpt/rmy.dsc,append,megabytes 50  --数据复制写入失败的记录,很重要额,出了错误,就可以看这个。
    map "T.t1", target chis.my;  --坑额,mysql的表,需加""号
    map "T.CH*", target chis.*;
    --map T.*, target chis.*;
    Add Replicat rmy , ExtTrail ./dirdat/p5   --添加复制进程

    启动

    ok,完成了,源端和目标端启动进程吧!

    常用命令

    start extract *   --启动抓取进程  all

    start replicat *   --启动复制进程 all

    info all   --查看所有进程

    stats  进程名  --目标端操作,查看复制进程工作没

    view report 进程名 --查看日志信息

    send [replicat|extract ]  进程名 ,report  --发送 抓取进程或写入进程的报告 获取后执行 view report 进程名 //输出报告

    help start  extract  --获取帮助信息

    start replicat  进程名   SKIPTRANSACTION    --复制进程遇到错误,跳过错误,启动

    提示: 善用help

    总结

     写这教程耗时1个半小时,力求完美,但还是不够详细,忘读者谅解.

    安装过程中参考了如下文章:

    http://www.oracle.com/webfolder/technetwork/tutorials/obe/fmw/goldengate/11g/mysql_orcl/index.html  --官方教程,其中map mysql表没打" "号,坑...

    http://www.oracle.com/webfolder/technetwork/tutorials/obe/fmw/goldengate/11g/GGS_Sect_Config_UX_MSQ_to_UX_ORA.pdf --官方原味文档,无bug

  • 相关阅读:
    五种线程池的分类与作用
    什么是死锁?
    事务隔离级别区分,未提交读,提交读,可重复读
    共享锁(读锁)和排他锁(写锁)
    java中的成员变量和全局变量的区别
    Algorithm
    6
    5
    4
    3
  • 原文地址:https://www.cnblogs.com/whf191/p/5583194.html
Copyright © 2011-2022 走看看