全部产品

OGG for MySQL

一、环境要求

  • MySQL 企业版或者社区版
  • OGG for MySQL 12.2.0.2
  • OGG Application Adapter 12.2.0.1
  • java 7(推荐JDK 1.8)

二、安装步骤:

(下面将介绍MySQL/OGG相关安装和配置过程,MySQL的安装将不做介绍,另外需要注意的是:MySQL/OGG相关参数配置以熟悉MySQL/OGG的运维人员配置为准,本示例只是提供一个可运行的样本)

安装包准备

相关安装包可以在文末的提示下进行下载。

  • OGG for MySQL
  • OGG Adater
  • DataHub OGG Plugin

OGG 源端配置

1. 源端MySQL配置

开启binlog

修改文件/etc/my.cnf,添加如下配置

   
  1. ## for ogg
  2. # Extract expects that all of the table columns are in the binary log.
  3. # As a result, only binlog_row_image set as full is supported and this is the default
  4. binlog_row_image=full
  5. # It must be set to the value of ROW, which directs the database to log DML statements in binary format.
  6. binlog_format=row
  7. # prevents DDL logging history table entries in the binlog
  8. binlog-ignore-db=oggddl
  9. # binlog path
  10. log-bin=/usr/local/mysql/logs/log
  11. # binlog index path
  12. log-bin-index=/usr/local/mysql/logs/binlog.index
  13. # enable binlog must set server-id, you can modify if there are multiple services
  14. server-id=1

修改完成后重启MySQL服务。

创建DB和user

mysql连接MySQL服务之后,输入以下命令创建DB

   
  1. # 创建ogg测试用的数据库ggtt
  2. create database ggtt;
  3. ## 创建ogg测试用的用户ogg_test
  4. grant all privileges on ggtt.* to 'ogg_test'@'localhost' identified by 'ogg_test';
  5. flush privileges;

2. 源端OGG安装

解压OGG for MySQL压缩文件

1、创建必须目录

启动ggsci客户端 ./ggsci,输入命令。下面的命令如果未做特殊说明,均在ggsci客户端中运行

   
  1. create subdirs

运行成功之后便可看到,OGG主目录下增加了几个dirxxx的目录

3. 配置源端mgr

编辑mgr配置edit params mgr,配置内容如下

   
  1. port 7839
  2. dynamicportlist 7840-7849
  3. purgeoldextracts /home/goldengate/dirdat/*,usecheckpoints, minkeepdays 2

配置完成后可以查看一下配置以确认,view params mgr

启动mgrstart mgr

查看mgr状态info mgr

4. 配置源端extract

编辑配置 edit params dhext,这里dhext为进程名,可以任意取,和配置中保持一致即可,下文不再赘述。

   
  1. extract dhext
  2. sourcedb ggtt@localhost:3306 userid ogg_test password ogg_test
  3. exttrail dirdat/ms
  4. TranLogOptions AltLogDest /usr/local/mysql/logs/binlog.index
  5. table ggtt.*;

编辑完成之后保存,添加并启动extact进程

   
  1. # 添加进程
  2. add extract dhext,tranlog,begin now
  3. # 每个队列文件大小为200MB
  4. add exttrail ./dirdat/ms,extract dhext, megabytes 200
  5. start dhext

5. 配置源端pump

编辑配置 edit params pump

   
  1. extract pump
  2. passthru
  3. -- enable compress
  4. rmthost localhost,mgrport 7839,compress
  5. rmttrail dirdat/ms
  6. table ggtt.*;

编辑完成之后保存,添加pump进程

   
  1. # 添加进程
  2. add extract pump,exttrailsource dirdat/ms
  3. # 添加目标端的trail文件,每个队列文件大小为200MB
  4. add rmttrail dirdat/ms,extract pump,megabytes 200
  5. # 这里启动pump进程时会连接目标端,因此需要首先启动目标端mgr,否则会报错
  6. start pump

配置目标端

1. 目标端OGG 安装

目标端的OGG是OGG Adapter,不需要安装,只需要解压即可。解压之后,需要创建必须目录,启动ggsci之后输入命令create subdirs,成功之后便可以看到OGG目录下增加了dirxxx的几个目录。

2. Datahub插件安装和配置

依赖环境:JDK >= 1.7。配置好JAVA_HOME, LD_LIBRARY_PATH,可以将环境变量配置到~/.bash_profile中,例如:

   
  1. export JAVA_HOME=/xxx/xxx
  2. export JRE_HOME=/xxx/xxx/jrexx
  3. export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$JRE_HOME/lib/amd64:$JRE_HOME/lib/amd64/server

修改环境变量后,解压datahub-ogg-plugin.tar.gz,修改conf路径下的javaue.properties文件,将{YOUR_HOME}替换为解压后的路径

解压datahub-ogg-plugin.tar.gz,修改conf路径下的javaue.properties文件,将{YOUR_HOME}替换为解压后的绝对路径

   
  1. gg.handlerlist=ggdatahub
  2. gg.handler.ggdatahub.type=com.aliyun.odps.ogg.handler.datahub.DatahubHandler
  3. gg.handler.ggdatahub.configureFileName={YOUR_HOME}/aliyun-datahub-ogg-plugin/conf/configure.xml
  4. goldengate.userexit.nochkpt=false
  5. goldengate.userexit.timestamp=utc+8
  6. gg.classpath={YOUR_HOME}/aliyun-datahub-ogg-plugin/lib/*
  7. gg.log.level=debug
  8. jvm.bootoptions=-Xmx512m -Dlog4j.configuration=file:{YOUR_HOME}/datahub-ogg-plugin/conf/log4j.properties -Djava.class.path=ggjava/ggjava.jar

修改conf路径下的log4j.properties文件,将{YOUR_HOME}替换为解压后的路径

   
  1. log4j.rootLogger=INFO,fileout
  2. log4j.logger.com.goldengate=DEBUG
  3. log4j.logger.com.aliyun=DEBUG
  4. # Console output...
  5. log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
  6. log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
  7. log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
  8. # Rolling log file output...
  9. log4j.appender.fileout=org.apache.log4j.RollingFileAppender
  10. log4j.appender.fileout.File={YOUR_HOME}/aliyun-datahub-ogg-plugin/log/datahub-ogg-plugin.log
  11. log4j.appender.fileout.MaxFileSize=10000KB
  12. log4j.appender.fileout.MaxBackupIndex=30
  13. log4j.appender.fileout.layout=org.apache.log4j.PatternLayout
  14. log4j.appender.fileout.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1} - %m%n

修改conf路径下的configure.xml文件,修改方式见文件中的注释。

需要重点关注的参数

  • sid任意填写,无实际意义
  • schemaoracleSchema填写MySQL的dbname,在本测试用例中填写ggtt
  • oracleTable填写MySQL 的table
  • rowIdColumn不能填写,因为MySQL无法获取rowid
   
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configue>
  3. <defaultOracleConfigure>
  4. <!-- 任意填写 必选-->
  5. <sid>100</sid>
  6. <!-- mysql database, 可以被mapping中的oracleSchema覆盖, 两者必须有一个非空-->
  7. <schema>ogg_test</schema>
  8. </defaultOracleConfigure>
  9. <defalutDatahubConfigure>
  10. <!-- datahub endpoint, 必填-->
  11. <endPoint>YOUR_DATAHUB_ENDPOINT</endPoint>
  12. <!-- datahub project, 可以被mapping中的datahubProject, 两者必须有一个非空-->
  13. <project>YOUR_DATAHUB_PROJECT</project>
  14. <!-- datahub accessId, 可以被mapping中的datahubAccessId覆盖, 两者必须有一个非空-->
  15. <accessId>YOUR_DATAHUB_ACCESS_ID</accessId>
  16. <!-- datahub accessKey, 可以被mapping中的datahubAccessKey覆盖, 两者必须有一个非空-->
  17. <accessKey>YOUR_DATAHUB_ACCESS_KEY</accessKey>
  18. <!-- 数据变更类型同步到datahub对应的字段,可以被columnMapping中的ctypeColumn覆盖 -->
  19. <ctypeColumn>optype</ctypeColumn>
  20. <!-- 数据变更时间同步到datahub对应的字段,可以被columnMapping中的ctimeColumn覆盖 -->
  21. <ctimeColumn>readtime</ctimeColumn>
  22. <!-- 数据变更序号同步到datahub对应的字段, 按数据变更先后递增, 不保证连续, 可以被columnMapping中的cidColumn覆盖 -->
  23. <cidColumn>record_id</cidColumn>
  24. </defalutDatahubConfigure>
  25. <!-- 默认最严格,不落文件 直接退出 无限重试-->
  26. <!-- 运行每批上次的最多纪录数, 可选, 默认1000-->
  27. <batchSize>1000</batchSize>
  28. <!-- 默认时间字段转换格式, 可选, 默认yyyy-MM-dd HH:mm:ss-->
  29. <defaultDateFormat>yyyy-MM-dd HH:mm:ss</defaultDateFormat>
  30. <!-- 脏数据是否继续, 可选, 默认false-->
  31. <dirtyDataContinue>true</dirtyDataContinue>
  32. <!-- 脏数据文件, 可选, 默认datahub_ogg_plugin.dirty-->
  33. <dirtyDataFile>datahub_ogg_plugin.dirty</dirtyDataFile>
  34. <!-- 脏数据文件最大size, 单位M, 可选, 默认500-->
  35. <dirtyDataFileMaxSize>200</dirtyDataFileMaxSize>
  36. <!-- 重试次数, -1:无限重试 0:不重试 n:重试次数, 可选, 默认-1-->
  37. <retryTimes>0</retryTimes>
  38. <!--指定shard id列表, 优先生效, 可选,例如0,1-->
  39. <shardId>0,1</shardId>
  40. <!-- 重试间隔, 单位毫秒, 可选, 默认3000-->
  41. <retryInterval>4000</retryInterval>
  42. <!-- 点位文件, 可选, 默认datahub_ogg_plugin.chk-->
  43. <checkPointFileName>datahub_ogg_plugin.chk</checkPointFileName>
  44. <mappings>
  45. <mapping>
  46. <!-- mysql database, 见上描述-->
  47. <oracleSchema></oracleSchema>
  48. <!-- mysql table, 必选-->
  49. <oracleTable>t_person</oracleTable>
  50. <!-- datahub project, 见上描述-->
  51. <datahubProject></datahubProject>
  52. <!-- datahub topic, 必选-->
  53. <datahubTopic>t_person</datahubTopic>
  54. <ctypeColumn></ctypeColumn>
  55. <ctimeColumn></ctimeColumn>
  56. <cidColumn></cidColumn>
  57. <columnMapping>
  58. <!--
  59. src:oracle字段名称, 必须;
  60. dest:datahub field, 必须;
  61. destOld:变更前数据落到datahub的field, 可选;
  62. isShardColumn: 是否作为shard的hashkey, 可选, 默认为false, 可以被shardId覆盖
  63. isDateFormat: timestamp字段是否采用DateFormat格式转换, 默认true. 如果是false, 源端数据必须是long
  64. dateFormat: timestamp字段的转换格式, 不填就用默认值
  65. -->
  66. <column src="id" dest="id" isShardColumn="true" isDateFormat="false" dateFormat="yyyy-MM-dd HH:mm:ss"/>
  67. <column src="name" dest="name" isShardColumn="true"/>
  68. <column src="age" dest="age"/>
  69. <column src="address" dest="address"/>
  70. <column src="comments" dest="comments"/>
  71. <column src="sex" dest="sex"/>
  72. <column src="temp" dest="temp" destOld="temp1"/>
  73. </columnMapping>
  74. </mapping>
  75. </mappings>
  76. </configue>

3. 配置目标端mgr

编辑mgr配置edit params mgr

   
  1. port 7839
  2. dynamicportlist 7840-7849
  3. purgeoldextracts dirdat/*,usecheckpoints, minkeepdays 7

启动mgr start mgr

4. 配置目标端writer

编辑配置edit params dhwriter

   
  1. extract dhwriter
  2. getEnv (JAVA_HOME)
  3. getEnv (LD_LIBRARY_PATH)
  4. getEnv (PATH)
  5. CUSEREXIT libggjava_ue.so CUSEREXIT PASSTHRU INCLUDEUPDATEBEFORES, PARAMS "{YOUR_HOME}/datahub-ogg-plugin/conf/javaue.properties"
  6. GetUpdateBefores
  7. table ggtt.*;

编辑完成之后保存,添加extact进程并启动

   
  1. # 添加进程
  2. add extract dhwriter, exttrailsource dirdat/ms
  3. # 启动
  4. start dhwriter

三、MySQL和DataHub字段类型对应说明

DataHub的TIMESTAMP类型存储微秒时间戳,字段映射到TIMESTAMP类型时,都会被转为微秒时间戳。

MySQL DataHub 备注
CHAR、VARCHAR STRING
INT、TINYINT、BIG INT BIGINT
DECIMAL、FLOAT、DOUBLE DOUBLE/DECIMAL 根据精度选择
DATETIME、TIMESTAMP TIMESTAMP
TEXT、TINYTEXT STRING

以上是MySQL常见的数据类型和DataHub的对应,更多MySQL支持的数据类型可以参考官方文档

四、历史版本下载

这里只提供了DataHub插件下载,OGG for MySQL和OGG Adatper还请访问OGG官网 或者Oracle Software Delivery Cloud website进行下载。

datahub-ogg-plugin OGG for MySQL OGG Adapter 支持MySQL版本
2.0.3 12.2.0.2 12.2.0.1 企业版 / 社区版
2.0.4 12.2.0.2 12.2.0.1 企业版 / 社区版
2.0.5 12.2.0.2 12.2.0.1 企业版 / 社区版