前言
一個需求,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