9 DDLレプリケーションの使用
データ定義言語(DDL)文(操作)を使用して、MySQLデータベースの構造(スキーマ)を定義します。MySQLソース・データベースとターゲット・データベース間のデータ・レプリケーションに、このようなDDL文を使用できます。MySQL DDLの詳細は、https://dev.mysql.com/doc/でMySQLのドキュメントを参照してください。
内容は次のとおりです。
- DDL構成の前提条件と考慮事項
- DDLレプリケーションのインストール
- メタデータ・サーバーの使用
- レプリケーションのためのDDLフィルタリングの使用
- DDLレプリケーションのトラブルシューティング
- DDLレプリケーションのアンインストール
親トピック: MySQLでのOracle GoldenGateの使用
9.1 DDL構成の前提条件と考慮事項
次に、DDLレプリケーションの構成の前提条件を示します。
-
DDLレプリケーションはMySQL 5.7.10以上の場合にサポートされます。
-
DDLレプリケーションの双方向のフィルタリングはサポートされていません。
-
リモート・キャプチャ実装ではDDLレプリケーションがサポートされていません。
-
Oracle GoldenGateのDDLレプリケーションでは、
ddl_rewriter
とddl_metadata
の2つのプラグインが共有ライブラリとして使用されるため、これらをMySQLサーバーにインストールしてから、Oracle GoldenGateレプリケーションを開始する必要があります。 -
スタンドアロン・アプリケーションであるOracle GoldenGate
metadata_server
が実行されていて、DDLメタデータをキャプチャしている必要があります。 -
新しい
oggddl
データベース配下にhistory
表(oggddl.history
)が必要です。このメタデータ履歴表を使用して、DDLメタデータ履歴が格納されて取得されます。履歴表レコードはバイナリ・ログには記録されないようにする必要があるため、my.cnf
ファイルでbinlog-ignore-db=oggddl
を指定してください。 -
手動で
oggddl
データベースまたはhistory
表をドロップしないでください。このイベント後に実行されるすべてのDDL文が失われます。 -
DDLキャプチャ中に
metadata_server
サーバーを停止しないでください。このイベント後に実行されるすべてのDDL文が失われます。 -
DDLキャプチャ中に
ddl_rewriter
およびddl_metadata
プラグインを手動で削除しないでください。このイベント後に実行されるすべてのDDL文が失われます。 -
ストアド・プロシージャ内で実行されるDDLはサポートされません。たとえば、次のように実行されるDDLはサポートされません。
CREATE PROCEDURE atssrc.generate_data() BEGIN DECLARE i INT DEFAULT 0; WHILE i < 800 DO SET i = i + 1; IF (i = 100) then alter table atssrc.`ddl6` add col2 DATE after id; ELSEIF (i = 200) then alter table atssrc.`ddl6` add col3 DATETIME after datetime; ELSEIF (i = 300) then alter table atssrc.`ddl6` add `col4` timestamp NULL DEFAULT NULL after channel; ELSEIF (i = 400) then alter table atssrc.`ddl6` add col5 YEAR after value; END IF; END WHILE; END$$ DELIMITER ; call atssrc.generate_data();
-
設計上、ハートビートDDLはキャプチャによって無視されるため、ターゲットで手動でハートビート表を作成する必要があります。
親トピック: DDLレプリケーションの使用
9.2 DDLレプリケーションのインストール
DDLレプリケーションをインストールするには、Oracle GoldenGateが提供するインストール・スクリプトをレプリケーション・ユーザーとして実行します。このユーザーはCreate
、Insert
、Select
、Delete
、Drop
およびTruncate
データベース権限を持つ必要があります。さらに、このユーザーは書込み権限を持ち、Oracle GoldenGateプラグインをMySQLプラグイン・ディレクトリにコピーする必要があります。たとえば、MySQLプラグインは通常は/usr/lib64/mysql/plugin/
に置かれます。
インストール・スクリプトのオプションには、install
、uninstall
、start
、stop
およびrestart
があります。
DDLレプリケーションをインストールするコマンドでは、それぞれ、インストール・オプション、ユーザーID、パスワード、ポート番号が使用されます。
bash-3.2$ ./ddl_install.sh install-option user-id password port-number
次に例を示します。
bash-3.2$ ./ddl_install.sh install root welcome 3306
DDLレプリケーションのインストール・スクリプトを使用して、次のタスクを行います。
- サポートされているMySQLサーバーのバージョンがインストールされていることを確認します。DDLレプリケーションはMySQL 5.7.10以上の場合にサポートされます。
- MySQLプラグイン・ディレクトリを見つけます。
ddl_rewriter
プラグインとddl_metadata
プラグイン、およびmetadata_server
ファイルが存在することを確認します。これらのファイルが見つからない場合は、エラー・メッセージが表示されてインストールが終了します。- プラグインがすでにインストールされていることを確認します。インストールされている場合はスクリプトが終了してメッセージが表示され、最初にアンインストールしてから再インストールするよう求められます。
- 実行中の場合は、
metadata_server
を停止します。 - 存在する場合は、
oggddl.history
表を削除します。 metadata_server
をデーモン・プロセスとして開始します。ddl_rewriter
およびddl_metadata
プラグインがインストールされます。
親トピック: DDLレプリケーションの使用
9.3 メタデータ・サーバーの使用
メタデータ・サーバーに次のオプションを使用できます。
-
Oracle GoldenGateの
metadata_server
が実行されていなければ、DDLメタデータをキャプチャできません。 -
start
オプションを指定してインストール・スクリプトを実行すると、メタデータ・サーバーが起動します。 -
stop
オプションを指定してインストール・スクリプトを実行すると、メタデータ・サーバーが停止します。 -
restart
オプションを指定してインストール・スクリプトを実行すると、実行中のメタデータ・サーバーが停止して再起動します。 -
Oracle GoldenGateのDDLレプリケーションでは、
ddl_rewriter
とddl_metadata
の2つのプラグインが共有ライブラリとして使用されるため、両方をMySQLサーバーにインストールしてから、Oracle GoldenGateレプリケーションを開始する必要があります。 -
oggddl.history
メタデータ履歴表を使用して、DDLメタデータ履歴が格納されて取得されます。
各MySQLサーバーに1つの履歴表とメタデータ・サーバーがあります。同じデータベース・サーバーの1つのExtractプロセスの複数のインスタンスから、同時にDDLを発行してキャプチャする場合、メタデータ履歴表へのアクセスと移入の間に競合が発生する可能性があります。同じMySQLサーバーの複数のExtractインスタンスを使用して、DDLの実行とキャプチャを行うことはお薦めできません。
親トピック: DDLレプリケーションの使用
9.4 レプリケーションのためのDDLフィルタリングの使用
MySQLのDDLレプリケーションでは次のオプションがサポートされます。
オプション | 説明 |
---|---|
|
表の作成を含めます。 |
|
|
|
|
|
この文字列を含むDDLを含めます。 |
|
この文字列を含むDDLを除外します。 |
|
MySQL DDLではこのオプションが使用されます。Oracle GoldenGateのMySQL DDLレプリケーションのデフォルトとして使用する必要があります。 |
|
デフォルト・オプション。 |
すべてのオプションのリストは、『Oracle GoldenGateリファレンス』のDDLに関する項を参照してください。
DDL文とオプションの使用
-
INCLUDE
(デフォルト)は、後続の記述に適合するすべてのオブジェクトを包含します。EXCLUDE
は記述に適合する項目を除外します。除外ルールは包含ルールより優先されます。 -
OPTYPE
は包含または除外する操作のタイプを指定します。CREATE
およびALTER
を使用できます。カッコを使用して複数のOPTYPE
を指定できます。たとえば、optype (create, alter)
と指定します。アスタリスク(*)のワイルドカードを指定して、すべての操作タイプを指定できます(デフォルト)。 -
OBJTYPE
は包含または除外するTABLE
操作を指定します。ワイルドカードを指定して、すべてのオブジェクト・タイプを指定できます(デフォルト)。 -
OBJNAME
は包含または除外する実際のオブジェクト名を指定します。たとえば、eric.*
と指定します。ワイルドカードは、複数の表を指定するその他の場合と同様に指定します。デフォルトは*
です。 -
String
は、stringspec
の文字列が存在する場合はルールがtrueであることを示します(または、excludestring
を指定すると、stringspec
が存在する場合はfalseになります)。複数のstring
項目を指定する場合は、各stringspec
の少なくとも1つの項目が存在しなければ、ルールはtrueになりません。次に例を示します。ddlops string (“a”, “b”), string (“c”) evaluates true if string “a” OR “b” is present, AND string “c” is present
-
local
は、現在のExtract証跡のみにルールを適用する場合に指定します(ルールを適用するExtract証跡をこのddlops
指定の前に記述する必要があります)。 -
パラメータ項目の終了を示すためにセミコロンが必要です。
次に例を示します。
ddl optype (create, drop), objname (eric.*); ddl exclude objname (eric.tab*); exttrail a; exttrail b; ddl optype (create), objname (joe.*), string (“abc”, “xyz”) local; ddl optype (alter), objtype (index);
この例では、
exttrail a
がeric
に属するすべてのオブジェクトに対するcreateおよびdropを取得しますが、tab
で始まるオブジェクトは除外されます。さらに、exttrail a
はすべてのalter index文を取得しますが、索引名がtab
で始まる場合は除外されます(たとえ、exttrail b
に含まれていてもルールはグローバルです)。exttrail b
はa
と同じオブジェクトを取得し、さらにjoe
に属するオブジェクトに対するすべてのcreateを取得します(文字列abc
またはxyz
がDDLテキストに存在する場合)。ddlops.c
モジュールはすべてのDDL操作パラメータを格納し、関連するルールを実行します。
さらに、DDLOPTIONS
パラメータでは、フィルタリングおよび文字列置換以外のDDL処理を構成します。DDLOPTIONS
文は複数使用可能ですが、1つの文のみを使用することをお薦めします。複数のDDLOPTIONS
文を使用する場合は、相互に上書きしないように、それぞれを一意の文にする必要があります。複数のDDLOPTIONS
文は、パラメータ・ファイルに指定された順に実行されます。
DDLおよびDDLOPTIONSに関する項を参照してください。
親トピック: DDLレプリケーションの使用
9.5 DDLレプリケーションのトラブルシューティング
DDLレプリケーションはメタデータ履歴表、およびメタデータ・プラグインとサーバーに依存します。DDLレプリケーションが有効なときにトラブルシューティングを行うには、履歴表の内容とメタデータ・プラグイン・サーバー・ログが必要です。
mysqldump
コマンドを使用し、次の例のいずれかに従って履歴表ダンプを生成できます。
mysqldump [options] database [tables] mysqldump [options] --databases [options] DB1 [DB2 DB3...] mysqldump [options] --all-databases [options]
例: bash-3.2$ mysqldump -uroot -pwelcome oggddl history > outfile
メタデータ・プラグインおよびサーバー・ログは、それぞれ、MySQLおよびOracle GoldenGateインストール・ディレクトリにあります。
ログ・ファイルにエラーが見つかった場合は、メタデータ・サーバーが実行中であることを確認する必要があります。
親トピック: DDLレプリケーションの使用
9.6 DDLレプリケーションのアンインストール
DDLイベントをキャプチャする必要がなくなった場合は、同じインストール・スクリプトを使用してuninstall
オプションを選択し、DDL設定を無効にできます。また、DDLパラメータが指定されたExtractを削除するか無効にする必要があります。再度、DDLのキャプチャが必要になった場合は、インストール・スクリプトを再実行できます。MySQLサーバーの同じインスタンスで、キャプチャ・プロセスの複数のインスタンスが実行中の場合は注意が必要です。複数のキャプチャ・プロセスが実行中で、最大でも1つのキャプチャがDDL文をキャプチャするように設計されている場合は、DDL設定を妨げたり、アンインストールしないでください。
インストール・スクリプトを使用してuninstall
オプションを指定し、DDLレプリケーションをアンインストールします。次に例を示します。
bash-3.2$ ./ddl_install.sh uninstall root welcome 3306
このスクリプトは次のタスクを実行します。
ddl_rewriter
およびddl_metadata
プラグインをアンインストールします。- 存在する場合は、
oggddl.history
表を削除します。 - MySQLプラグイン・ディレクトリからプラグインを削除します。
- 実行中の場合は、
metadata_server
を停止します。
親トピック: DDLレプリケーションの使用