すべてのプロダクト
Search
ドキュメントセンター

DataHub:MySQL用OGG

最終更新日:Jan 12, 2025

1. 環境要件

  • MySQL Enterprise EditionまたはCommunity Editionがインストールされている。

  • Oracle GoldenGate ( OGG ) for MySQL 12.2.0.2がインストールされている。

  • OGG Application Adapters 12.2.0.1がインストールされている。

  • Java 7がインストールされている。Java Development Kit ( JDK ) 1.8をインストールすることをお勧めします。

2. インストール

以下のセクションでは、MySQLの設定方法、Oracle GoldenGate ( OGG ) のインストール方法と設定方法について説明します。このトピックで使用されているパラメーター設定は、あくまでも参考です。実際の業務運用では、O&Mエンジニアが提供する設定を使用してください。

インストールパッケージの準備

このトピックの最後のセクションを参照して、必要なインストールパッケージをダウンロードできます。

  • MySQL用OGG

  • OGG Application Adapters

  • OGG用DataHubエージェント

ソースデータベースでのOGGの設定

1. ソースデータベースでMySQLを設定する

バイナリロギングを有効にする

/etc/my.cnf ファイルを編集し、次の設定を追加します。

## for ogg
# Extractは、すべてのテーブル列がバイナリログにあることを想定しています。
# そのため、binlog_row_imageをfullに設定することのみがサポートされており、これがデフォルトです。
binlog_row_image=full
# データベースにDML文をバイナリ形式でログに記録するように指示するROWの値に設定する必要があります。
binlog_format=row
# バイナリログのDDLロギング履歴テーブルエントリを防ぎます
binlog-ignore-db=oggddl
# バイナリログのパス
log-bin=/usr/local/mysql/logs/log
# バイナリログインデックスのパス
log-bin-index=/usr/local/mysql/logs/binlog.index
# バイナリログを有効にするにはserver-idを設定する必要があります。複数のサービスがある場合は変更できます。
server-id=1

/etc/my.cnfファイルの変更後、MySQLを再起動します。

データベースとユーザーを作成する

MySQLに接続した後、次のコマンドを実行してデータベースとユーザーを作成します。

# OGGテスト用にggttという名前のデータベースを作成します。
create database ggtt;

## OGGテスト用にogg_testという名前のユーザーを作成します。
grant all privileges on ggtt.* to 'ogg_test'@'localhost' identified by 'ogg_test';
flush privileges;

2. ソースデータベースにOGGをインストールする

MySQL用OGGインストールパッケージを解凍します。

1. 必要なディレクトリを作成する

./ggsci コマンドを実行して、Oracle GoldenGate Software Command Interface ( GGSCI ) を起動し、次のコマンドを入力します。特に指定がない限り、以下のセクションのコマンドはGGSCIで実行する必要があります

create subdirs

上記のコマンドを実行すると、OGGホームディレクトリにdir で始まる名前の複数のディレクトリが作成されます。

3. ソースデータベースのManagerプロセスを設定する

edit params mgr コマンドを実行して、Managerプロセスを設定します。次のコードは設定を示しています。

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

Managerプロセスを設定した後、view params mgr コマンドを実行して設定を確認できます。

start mgr コマンドを実行して、Managerプロセスを起動します。

info mgr コマンドを実行して、Managerプロセスのステータスを表示します。

4. ソースデータベースのExtractプロセスを設定する

edit params dhext コマンドを実行して、Extractプロセスを設定します。dhextはプロセス名です。設定と同じであれば、プロセス名はカスタマイズできます。この要件については、以下のセクションでは繰り返しません。

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

設定を編集した後、設定を保存します。次に、Extractプロセスを追加して起動します。

# Extractプロセスを追加します。
add extract dhext,tranlog,begin now

# 各証跡の最大ファイルサイズは 200 MBです。
add exttrail ./dirdat/ms,extract dhext, megabytes 200

start dhext

5. ソースデータベースのデータポンプを設定する

edit params pump コマンドを実行して、データポンプを設定します。

extract pump
passthru
-- 圧縮を有効にする
rmthost  localhost,mgrport 7839,compress
rmttrail  dirdat/ms
table ggtt.*;

設定を編集した後、設定を保存します。次に、データポンプを追加します。

# データポンプを追加します。
add extract pump,exttrailsource dirdat/ms

# デスティネーションデータベースに証跡を追加します。各証跡の最大ファイルサイズは 200 MBです。
add rmttrail dirdat/ms,extract pump,megabytes 200

# データポンプを起動すると、デスティネーションデータベースに接続されます。そのため、データポンプを起動する前に、デスティネーションデータベースのManagerプロセスを起動する必要があります。そうしないと、エラーが報告されます。
start pump

デスティネーションデータベースの設定

1. デスティネーションデータベースにOGGをインストールする

デスティネーションデータベースのOGGはOGG Application Adaptersであり、手動でインストールする必要はありません。インストールパッケージを解凍するだけです。解凍後、GGSCIを起動し、create subdirs コマンドを入力して必要なディレクトリを作成する必要があります。create subdirsコマンドを実行すると、OGGディレクトリにdirで始まる名前の複数のディレクトリが作成されます。

2. OGG用DataHubプラグインをインストールして設定する

環境要件:JDK 1.7以降。JAVA_HOMEおよびLD_LIBRARY_PATH環境変数を設定し、~/.bash_profileファイルで設定を指定します。例:

export JAVA_HOME=/xxx/xxx
export JRE_HOME=/xxx/xxx/jrexx
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}を解凍後の絶対パスに置き換えます。

gg.handlerlist=ggdatahub
gg.handler.ggdatahub.type=com.aliyun.odps.ogg.handler.datahub.DatahubHandler
gg.handler.ggdatahub.configureFileName={YOUR_HOME}/aliyun-datahub-ogg-plugin/conf/configure.xml
goldengate.userexit.nochkpt=false
goldengate.userexit.timestamp=utc+8
gg.classpath={YOUR_HOME}/aliyun-datahub-ogg-plugin/lib/*
gg.log.level=debug
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}を解凍後のパスに置き換えます。

log4j.rootLogger=INFO,fileout
log4j.logger.com.goldengate=DEBUG
log4j.logger.com.aliyun=DEBUG

# コンソール出力...
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

# ローリングログファイル出力...
log4j.appender.fileout=org.apache.log4j.RollingFileAppender
log4j.appender.fileout.File={YOUR_HOME}/aliyun-datahub-ogg-plugin/log/datahub-ogg-plugin.log
log4j.appender.fileout.MaxFileSize=10000KB
log4j.appender.fileout.MaxBackupIndex=30
log4j.appender.fileout.layout=org.apache.log4j.PatternLayout
log4j.appender.fileout.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1} - %m%n

次のコードに示すように、インストールディレクトリのconfサブディレクトリにあるconfigure.xmlファイルを編集します。

注意すべきパラメーター

  • sid:このパラメーターには実用的な意味はありません。このパラメーターは任意の値に設定できます。

  • schema および oracleSchema:MySQLデータベースの名前。この例では、このパラメーターをggttに設定します。

  • oracleTable:MySQLテーブルの名前。

  • rowIdColumn:MySQLは行 IDを取得できないため、このパラメーターを設定することはできません。

<?xml version="1.0" encoding="UTF-8"?>
<configue>
    <defaultOracleConfigure>
        <!--必須。このパラメーターは任意の値に設定できます。-->
        <sid>100</sid>
        <!--MySQLデータベースの名前。この設定は、マッピングのoracleSchemaで上書きできます。これらの 2つのパラメーターの少なくとも 1つを指定する必要があります。-->
        <schema>ogg_test</schema>
    </defaultOracleConfigure>
    <defalutDatahubConfigure>
        <!--必須。DataHubのエンドポイント。-->
        <endPoint>YOUR_DATAHUB_ENDPOINT</endPoint>
        <!--DataHubプロジェクトの名前。この設定は、マッピングのdatahubProjectで上書きできます。これらの 2つのパラメーターの少なくとも 1つを指定する必要があります。-->
        <project>YOUR_DATAHUB_PROJECT</project>
        <!--DataHubにアクセスするためのAccessKey ID。この設定は、マッピングのdatahubAccessIdで上書きできます。これらの 2つのパラメーターの少なくとも 1つを指定する必要があります。-->
        <accessId>YOUR_DATAHUB_ACCESS_ID</accessId>
        <!--DataHubにアクセスするためのAccessKeyシークレット。この設定は、マッピングのdatahubAccessKeyで上書きできます。これらの 2つのパラメーターの少なくとも 1つを指定する必要があります。-->
        <accessKey>YOUR_DATAHUB_ACCESS_KEY</accessKey>
        <!--データの更新タイプを示すDataHubのフィールド。この設定は、マッピングのctypeColumnで上書きできます。-->
        <ctypeColumn>optype</ctypeColumn>
        <!--データの更新時間を示すDataHubのフィールド。この設定は、マッピングのctimeColumnで上書きできます。-->
        <ctimeColumn>readtime</ctimeColumn>
        <!--更新されたレコードのシーケンス番号を示すDataHubのフィールド。この設定は、マッピングのcidColumnで上書きできます。シーケンス番号は、レコードが更新されるにつれて増加します。複数のシーケンス番号は連続していない場合があります。-->
        <cidColumn>record_id</cidColumn>
    </defalutDatahubConfigure>
    <!--エラー処理方法。デフォルトでは、エラーが発生した場合、システムはエラーを無視して操作を続行するか、操作を繰り返し再試行します。-->
    <!--オプション。一度に管理できるレコードの最大数。デフォルト値: 1000。-->
    <batchSize>1000</batchSize>
    <!--オプション。タイムスタンプが変換される形式。デフォルト値:yyyy-MM-dd HH:mm:ss。-->
    <defaultDateFormat>yyyy-MM-dd HH:mm:ss</defaultDateFormat>
    <!--オプション。システムがダーティレコードを無視するかどうかを指定します。デフォルト値:false。-->
    <dirtyDataContinue>true</dirtyDataContinue>
    <!--オプション。ダーティレコードを格納するファイルの名前。デフォルト値:datahub_ogg_plugin.dirty。-->
    <dirtyDataFile>datahub_ogg_plugin.dirty</dirtyDataFile>
    <!--オプション ダーティレコードを格納するファイルの最大サイズ。単位:MB。デフォルト値: 500。-->
    <dirtyDataFileMaxSize>200</dirtyDataFileMaxSize>
    <!--オプション。許可される最大再試行回数。値 -1は無限の再試行を示します。値 0は再試行なしを示します。0より大きい値は、指定された回数の再試行を示します。-->
    <retryTimes>0</retryTimes>
    <!--オプション。データが書き込まれる優先度の高いシャードの ID。例:0,1。-->
    <shardId>0,1</shardId>
    <!--オプション。2回の連続した再試行の間隔。単位:ミリ秒。デフォルト値: 3000。-->
    <retryInterval>4000</retryInterval>
    <!--オプション。チェックポイントファイルの名前。デフォルト値:datahub_ogg_plugin.chk。-->
    <checkPointFileName>datahub_ogg_plugin.chk</checkPointFileName>
    <mappings>
        <mapping>
            <! --MySQLデータベースの名前。このパラメーターについては、前のセクションで説明しています。-->
            <oracleSchema></oracleSchema>
            <!--必須。MySQLテーブルの名前。-->
            <oracleTable>t_person</oracleTable>
            <!--DataHubプロジェクトの名前。このパラメーターについては、前のセクションで説明しています。-->
            <datahubProject></datahubProject>
            <!--必須。DataHubトピックの名前。-->
            <datahubTopic>t_person</datahubTopic>
            <ctypeColumn></ctypeColumn>
            <ctimeColumn></ctimeColumn>
            <cidColumn></cidColumn>
            <columnMapping>
                <!--
                src:必須。Oracleテーブルのフィールド名。
                dest:必須。DataHubトピックのフィールド名。
                destOld:オプション。更新前のデータを格納するDataHubトピックフィールド。
                isShardColumn:オプション。ハッシュキー値に基づいてシャード IDを生成するかどうかを指定します。この設定は、shardIdパラメーターで上書きできます。デフォルト値:false。
                isDateFormat:dateFormatパラメーターに基づいてタイムスタンプを文字列に変換するかどうかを指定します。デフォルト値:true。このパラメーターをfalseに設定した場合、ソースデータベースのデータ型はLONGである必要があります。
                dateFormat:タイムスタンプが変換される形式。このパラメーターを空のままにすると、デフォルトの形式が使用されます。
                -->
                <column src="id" dest="id" isShardColumn="true"  isDateFormat="false" dateFormat="yyyy-MM-dd HH:mm:ss"/>
                <column src="name" dest="name" isShardColumn="true"/>
                <column src="age" dest="age"/>
                <column src="address" dest="address"/>
                <column src="comments" dest="comments"/>
                <column src="sex" dest="sex"/>
                <column src="temp" dest="temp" destOld="temp1"/>
            </columnMapping>
        </mapping>
    </mappings>
</configue>

3. デスティネーションデータベースのManagerプロセスを設定する

edit params mgr コマンドを実行して、Managerプロセスを設定します。

port 7839
dynamicportlist 7840-7849
purgeoldextracts dirdat/*,usecheckpoints, minkeepdays 7

start mgr コマンドを実行して、Managerプロセスを起動します。

4. デスティネーションライターのExtractプロセスを設定する

edit params dhwriter コマンドを実行して、Extractプロセスを設定します。

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

設定を編集した後、設定を保存します。次に、Extractプロセスを追加して起動します。

# Extractプロセスを追加します。
add extract dhwriter, exttrailsource dirdat/ms

# Extractプロセスを起動します。
start dhwriter

3. MySQLとDataHubのフィールドのデータ型間のマッピング

DataHubのTIMESTAMP型のフィールド値の単位はマイクロ秒です。MySQLのDATETIME型または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でサポートされているデータ型の詳細については、1.3.5 サポートされているMySQLデータ型をご参照ください。

4. インストールパッケージ

このトピックでは、OGG用DataHubプラグインのダウンロードリンクのみを提供しています。MySQL用OGGおよびOGG Application Adaptersをダウンロードするには、Oracle GoldenGateのダウンロード および Oracle Software Delivery Cloud をご参照ください。

datahub-ogg-plugin

MySQL用OGG

OGGアダプター

サポートされているMySQLバージョン

2.0.3

12.2.0.2

12.2.0.1

Enterprise EditionおよびCommunity Edition

2.0.4

12.2.0.2

12.2.0.1

Enterprise EditionおよびCommunity Edition

2.0.5

12.2.0.2

12.2.0.1

Enterprise EditionおよびCommunity Edition