はじめに

この記事では、Qlik ReplicateのソースとしてMySQLベースのデータベースを利用し、変更データをキャプチャーしてターゲットシステムへデータ移行・転送をおこなうための設定方法をご説明します。尚、ここでは設定手順の概要とポイントについて解説しますが、詳細につきましてはQlik ReplicateヘルプサイトにあるQlik Replicateの「Setup and User Guide」の「Using MySQL-Based Database as a Source」の項をご参照ください。

【検証環境】

  • Qlik Replicate 6.6.0 SR1 on Windows
  • MySQL Community Edition 8.0.20 on Windows

サポートされているデータベースエディション

Qlik Replicateでは以下のMySQLデータベースのエディションをサポートされています。

  • MySQL Community Edition
  • MySQL Enterprise Edition
  • MySQL Standard Edition
  • MySQL Cluster Carrier Grade Edition

また、MariaDBやMySQL互換のAmazon Auroraなどもサポート対象となっています。サポート対象のバージョンなどの詳細につきましては、Qlik Replicateヘルプサイトにある「Support Platforms and Endpoints」 (Qlik Replicate Support Matrix)をご参照ください。

制限について

Qlik ReplicateのMySQLエンドポイント利用において、以下の様な制限がありますので、利用に当たっては事前に確認が必要です。以下はあくまでも一例となり、全ての一覧についてはQlik ReplicateヘルプサイトにあるQlik Replicateの「Setup and User Guide」をご参照ください。

  • Drop Table, Rename Table及びパーティション化されたテーブルに対する全てのDDL(データ定義言語)はサポートされていません。
  • MySQL が Windows にインストールされている場合、大文字と小文字の両方が名前に含まれるテーブルから変更が取り込まれません。
  • alter table <テーブル名>、 add column <列名>のステートメントを使用して、テーブルの先頭 または中間に列を追加することはできません。列は常にテーブルの末尾に追加されます。・・など

Binary Loggingの有効化

MySQLサーバー上でBinary Loggingを有効化するために、MySQLの構成ファイル(Windowsではmy.ini 、Linuxではmy.cnf )の[mysqld]に以下のエントリを設定する必要があります。

  • server_id: 1以上の値に設定します。
  • log-bin: バイナリログファイルを保存する場所をしていします。
  • binlog_format: ROW に設定します。
  • expire_logs_days: ログの保存期間を設定します。デフォルト値の0は無期限で、本番環境ではディスク容量の使いすぎを防ぐため1以上の値の設定が推奨されています。
  • binlog_row_image: FULLに設定します。
  • binlog_checksum: バイナリログのイベントごとにチェックサムを書き込む指定を行います。NONEもしくはCRC32に設定します。
  • log_slave_updates: MySQL Slaveデータベースからレプリケートする場合などにtrue(1)を指定します。

ここでは例として、以下をmy.iniファイルに設定します。上記の設定に加えて、default-character-setの設定も行っています。

[client]
default-character-set   = utf8

[mysql]
default-character-set   = utf8

[mysqld]
server-id = 1
log-bin = "C:\ProgramData\MySQL\MySQL Server 8.0"
binlog-format = ROW
expire_logs_days = 0
binlog_row_image = full
binlog-checksum = CRC32
character-set-server = utf8

サンプルデータベースの作成(任意)

ここでは、検証用にサンプルのデータベースを作成してデータをインポートします。以下からインポート用のファイルをダウンロードします。

>>サンプルデータベースのダウンロード

以下の手順でMySQLサーバー上のrootユーザーでsalesデータベースを作成し、データをインポートします。

//salesデータベースを作成
mysql -u root -p
create database sales;
\q

//sales.backupのデータをsalesデータベースにインポート
mysql -uroot -p<パスワード> sales < sales.backup

Qlik Replicate用のユーザー作成と権限付与

Qlik Replicateでレプリケート処理を行うためのユーザー作成と権限付与が必要となります。Qlik Replicate用のユーザーには以下の権限が必要です。

  • REPLICATION CLIENT、REPLICATION SLAVE(MySQL5.6.6より前のバージョンではSUPERが必要)
  • レプリケーションの対象となるテーブルのSelect権限

以下がユーザー作成と権限付与の例となります。

mysql -u root -p
CREATE USER 'replicate_user' IDENTIFIED WITH mysql_native_password BY 'replicate_password';
GRANT SELECT ON *.* TO replicate_user;
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO replicate_user;

MySQL ODBCクライアントの導入

Qlik Replicate側にはMySQL ODBC 64-bit clientをインストールする必要があります。インストールファイルのダウンロード、及び導入方法については以下のサイトをご参照ください。

https://dev.mysql.com/downloads/connector/odbc/

Qlik Replicate上でのエンドポイント接続の作成

スタートメニューから[Qlik Replicate Console]を開きます。

image_thumb12

[Manage Endpoint Connections]をクリックします。

image_thumb14

[New Endpoint Connections]をクリックします。

image_thumb16

以下の形でエンドポイント名を入力して、[Role]から[Source]、[Type]から[MySQL]を選択し、接続情報及び認証情報を入力します。[Test Connection]をクリックして接続を確認し、[Save]をクリックします。

image

Replicateタスクの作成

[New Task….]をクリックします。

image_thumb38

以下の設定で[OK]をクリックします。ここでは[Replicate Profile]として[Unidirectional](ソースからターゲットへの一方向のレプリケーション)を選択し、[Task Options]では[Full Load](全てのデータを初期ロード)と、[Apply Changes](初期ロード完了後、ソースに対する変更キャプチャーしてターゲットに適用)を選択しています。[Store Changes]を選択すると、変更データをターゲットに適用して最新データに更新するだけでなく、過去の変更履歴を別テーブルに保存することができます。

image

作成した「SAP_MySQL_RM_SRC」をソースに配置し、任意のターゲット(ここではSnowflakeをターゲットとして利用しています)を配置します。そして、[Table Selection]をクリックします。

image

[Schemas]に「sales」を指定して[Search]をクリックします。ここではsalesスキーマの全てのテーブルを選択し、[>]ボタンをクリックしてレプリケーションの対象に追加しています。設定が完了したら[OK]をクリックします。

image

[Save]をクリックして保存し、[Run]をクリックしてタスク実行します。

image

Full Load(初期のフルロード)のMonitor画面が表示され(表示されない場合には[Monitor]>[Full Load]を選択します)、ロードの状況が確認できます。全てロードが完了すると[Completed]のステータスに表示されます。

image

次に、ソースデータに変更を行い、その変更の適用状況を確認します。ここではMySQL Workbench上でレコードの変更(Update)と追加(Insert)を行ってコミットしています。

image

Monitor上で[Change Processing]タブを開くと、変更の適用情報が確認できます。以下ではUpdatesが1件、Insertが1件適用されていることが確認できます。

image

Snowflakeコンソール上で[Worksheet]を開いて対象のテーブルを右クリックして[Preview Data]を選択すると、データの内容を参照し変更が適用されているかを確認することができます。

image