FlyData Syncでは、MySQLのデータをAmazon Redshiftへ転送することができます。FlyData SyncはMySQLのバイナリログ(通称 binlog)を利用し、MySQLのデータをAmazon Redshiftへレプリカします。同期は、複数のMySQLサーバからも実行できます。データは5分ごとに同期されるため、常にほぼ最新のデータを使ってAamzon Redshiftで分析することが可能です。

設定手順は簡単です。MySQLにてバイナリログを有効にし、FlyDataにMySQLとRedshiftクラスタの接続情報を設定し、同期したいテーブルを指定するだけです。設定が完了しFlyData Syncを起動すると、FlyData SyncはMySQLのデータをAmazon Redshiftへと転送し始めます。転送が完了すると、FlyData Syncは、MySQLのデータやスキーマに発生した変更をバイナリログに書き込まれたログから検知し、変更をAmazon Redshiftへと反映します。

本ドキュメントでは、FlyData Syncの設定方法をご説明します。なお、AWSにて提供されているデータベースサービスのRDS MySQLをご利用の場合は、Amazon RDSとRedshiftの同期をご参照ください。

Amazon Redshift上でのFlyDataのアクセス許可

まずはじめに、Amazon RedshiftとFlyDataサーバ間での通信を許可するための設定を行います。この設定をすることで、FlyDataサーバがAmazon Redhisftへデータをアップロードすることができるようになります。

FlyDataサーバがAmazon Redshiftへ接続するために、FlyDataの設定画面に記載されているIPからの接続を許可する必要があります。

Redshift Security IP Addresses

これらのIPアドレスをRedshiftクラスタのエンドポイントアクセスに使用できるよう、設定してください。接続許可の設定はAmazon Virtual Private Cloud(VPC)を利用している場合と利用していない場合とで手順が異なります。次を参考に設定を進めてください。

Virtual Private Cloud (VPC)を利用している場合

まず、FlyData IPを追加するセキュリティグループを特定する必要があります。AWS ConsoleのRedshiftクラスタ詳細ページにて、VPCダッシュボードを選択し、次にSecurity Groupsを表示します。このとき検索ボックスにSecurity Group ID (例:sg-8cde8f18).を入力することで、フィルタすることができます。そして、Redshift起動時に設定したセキュリティグループを選択します。すると、下記のスクリーンショットのようにセキュリティグループの詳細が表示されます。

次にFlyDataのIPアドレスのアクセス許可を設定します。選択したセキュリティグループのページの真ん中あたりにあるInbound Rulesタブを選択し、Editボタンを押します。ダイアログボックスが表示されますので、Edit Inbound RulesAdd Ruleの順に選択し、IPアドレスをひとつずつ登録してください。ルールについては下記のように設定してください。

  • Type: Custom TCP Rule
  • Port Range: port
  • Source: [FlyData Consoleの設定ページに記載されているIPアドレス]

Typeはすべてのルールで同じものを設定してください。ポートは、Amazon Redshiftクラスタで設定した値を入力してください。デフォルトでは5439となっています。Sourceは1つ目のルールではひとつめのIPを、2つ目以降では、それぞれ2つ目、3つ目というように設定してください。すべてのIPを登録し終えたら、Saveボタンを押します。

以上でFlyDataがRedshiftクラスタにアクセスするための設定は完了です。次はMySQLを設定するの項目を参照して設定を続けてください。

VPCを利用していない場合

Amazon’s Virtual Private Cloudを使用していない場合でも、Amazon RedshiftにFlyDataのIPアドレスを登録する必要があります。AWSコンソールのRedshiftページのSecurity Groupsを選択してセキュリティグループ設定ページを開き、Amazon Redshiftクラスタにて指定されているCluster Security Groupsを選択します。

以下のようにFlyDataからの接続許可を設定してください。

  • Connection Type: CIDR/IP
  • CIDR/IP to Authorize: [FlyData Consoleの設定ページに記載されているIPアドレス]

以上でFlyDataサーバからのRedshiftクラスタへの接続が許可されました。

MySQLを設定する

次のステップでは、あなたのMySQLサーバでバイナリログを有効にします。下記パラメータを、MySQLサーバの設定ファイル(my.confmy.ini等、ご使用の環境でご確認ください)の[mysqld]セクションに追記してください。

server-id = 888888
log_bin = /file_path/mysql-bin.log  
expire_logs_days = 4
max_binlog_size = 1G
binlog_format = ROW
net_read_timeout = 3600
net_write_timeout = 3600
wait_timeout = 86400
replicate-wild-do-table = yourdb.%
log-slave-updates = TRUE

log_binパラメータの値は、バイナリログファイルへのパスとファイル名を指定します。server-idパラメータには、レプリケーションしているサーバ間で一意となる値を指定してください。

利用しているMySQLサーバのバージョンによっては、下記の2つのパラメータの指定も必要となります。同じくMySQL設定ファイルに追記してください。

log-bin-use-v1-row-events = TRUE    
# MySQL 5.1: このオプションはサポートされていません。追加不要です
# MySQL 5.1-ndb: 5.1.56-ndb-7-0-27 か 5.1.56-ndb-7.1.16 以上
# MySQL 5.5: このオプションはサポートされていません。追加不要です
# MySQL 5.5-ndb: 5.5.15-ndb-7.2.1 以上
# MySQL 5.6: 5.6.6 以上
# MySQL 5.7: すべてのバージョン

show_compatibility_56 = ON
# MySQL Server 5.7.1 以上

設定ファイルの編集が完了しましたら、MySQLサーバを再起動し、設定を反映してください。

FlyData Sync用のアカウントを作成する

設定ファイルの編集が終了したので、次はMySQLサーバにFlyData Sync用のMySQLユーザを作成します。MySQL Workbench等を使用してMySQLサーバにmasterアカウントでログインし、FlyData Sync専用のユーザを作成してください。次のようなコマンドで作成できます。

mysql> CREATE USER 'sync'@'%' IDENTIFIED BY 'your_password';
mysql> GRANT REPLICATION SLAVE, SELECT, RELOAD, REPLICATION CLIENT, LOCK TABLES, SUPER ON *.* TO 'sync'@'%'; 
mysql> FLUSH PRIVILEGES;

your_passwordは、任意の値に変更してください。

SUPER権限は、MySQLサーバのバージョンが5.1.63以下の場合にのみ必要です。

FlyDataコンソールでAmazon Redshiftの情報を設定する

次に、FlyDataコンソールにAmazon Redshiftの情報を設定します。Amazon Redhshiftの設定をすることにより、FlyDataはMySQLのデータをAmazon Redshiftにレプリケーションすることが可能となります。WebブラウザからFlyDataコンソールへログインします。
https://console.flydata.com/

ログイン後、FlyDataコンソールの設定ページを開き、Amazon Redshiftクラスタ設定に必要な情報を入力します。接続情報は設定アカウントにのみ閲覧可能でありセキュアとなっております。オプションとして設定可能な項目はデフォルトのままで進めていただけます。

MySQLの情報をFlyDataに設定する

FlyData Syncを正しく稼働させるために、FlyDataコンソールにてMySQL Serverへの接続情報と、Amazon Redshift上でレプリケーションしたいデータベース、スキーマ、同期したいテーブル名を登録する必要があります。

FlyDataコンソールにログイン後、ダッシュボードページを開き、データエントリの追加ボタンを押下してください。データエントリ入力項目が表示されましたら、同期に必要な情報を入力します。名前の項目には任意の名称を入力してください。データソースはMySQLを選択します。

次にMySQLへの接続情報を入力します。

  • Host: MySQLサーバのホスト名
  • Port: MySQLサーバのport番号(デフォルトは3306)
  • Username: FlyDataが接続する際に使用するMySQLのユーザ名
  • Password: 上記ユーザのパスワード
  • Database: Amazon Redshiftに同期したいテーブルを持つデータベース名

テーブル: レプリケートしたいテーブル名

  • Full Sync:MySQL上で実行されたすべての INSERT/UPDATE/DELETE/ALTER TABLE を同期したいテーブルを登録します。
  • Append Only:MySQL上で実行された DELETE以外のすべてを同期させたいテーブルを登録します。
  • Schema: デフォルトのRedshiftクラスタのスキーマを利用しない場合は同期するスキーマ名を入力してください。

入力が完了したら 更新 ボタンを押して変更を保存します。

FlyData Agentをインストールする

MySQLとRedshiftの設定が終わったので、次にMySQLサーバとAmazon Redshift間を素早く通信するFlyData Agentをインストールします。

FlyData Agentをインストールするために、FlyData Consoleにログインし、ダッシュボードページにあるインストールコマンドを確認します。DevelopmentまたはProductionタブを環境に合わせて選択してください。選択後、インストールコマンドが表示されます。

インストールコマンドをコピーし、FlyData AgentをインストールするLinuxサーバにログインして実行します。インストールコマンドはroot権限か、または適切な管理者権限を必要とします。インストールは10分から15分ほどかかります。インストールが完了したら、flydataコマンドを有効にするために、次のコマンドを実行してください。

 '$ source ~/.bashrc' 

Amazon Redsfhit上にテーブルを作成するSQLを生成する

次にレプリケーションするテーブルをAmazon Redshift側に作成します。簡単に実行するため、Amazon Redshift上でテーブルを作成するSQL実行ファイルを下記の手順で生成することができます。次のコマンドをFlyData Agentがインストールされたサーバで実行してください。

$ flydata sync:generate_table_ddl > create_table.sql

このコマンドを実行すると、Amazon Redshift上に同じテーブルを作成するためのCREATE TABLE文を抽出します。データは含まれません。まずはデータを受け取るテーブルを作成する必要があるのです。このコマンドの実行結果ファイルは、テキストのスクリプトファイルとしてテーブル作成に使用することができます。

Amazon Redhisftにテーブルを作成する

Amazon Redshift上に作成するすべてのテーブルのSQL文が用意できたので、いよいよ実行します。

上記で作成されたcreate_table.sqlの内容をコピーし、FlyData Access Redshift consoleに貼り付けて実行します。 完了すると、Amazon Redshiftクラスタ上にテーブルが作成されます。

FlyData Syncを実行する

以上で、MySQLサーバ、FlyDataサーバ、そしてAmazon Redshiftの設定すべてが完了し、同期を開始する準備が整いました。次のコマンドをFlyData Agentをインストールしたサーバにて実行してください。これにより、MySQLサーバの指定されたテーブルからすべてのデータをAmazon Redshiftにコピーします。

$ flydata start

とてもシンプルですが、初期同期が開始されます。初期同期は数分で終わることもありますが、レプリケーションするデータ量によっては数時間かかることもあります。

初期同期が完了すると、FlyData Syncの設定は完了です。この時からMySQL上のすべての更新が5分〜15分後にはAmazon Redshiftクラスタ上に反映されるようになり、いつでもAmazon上で分析に使用することができるようになります。

FlyData Syncでは、MySQLのデータをAmazon Redshiftへ転送することができます。FlyData SyncはMySQLのバイナリログ(通称 binlog)を利用し、MySQLのデータをAmazon Redshiftへレプリカします。同期は、複数のMySQLサーバからも実行できます。データは5分ごとに同期されるため、常にほぼ最新のデータを使ってAamzon Redshiftで分析することが可能です。

設定手順は簡単です。MySQLにてバイナリログを有効にし、FlyDataにMySQLとRedshiftクラスタの接続情報を設定し、同期したいテーブルを指定するだけです。設定が完了しFlyData Syncを起動すると、FlyData SyncはMySQLのデータをAmazon Redshiftへと転送し始めます。転送が完了すると、FlyData Syncは、MySQLのデータやスキーマに発生した変更をバイナリログに書き込まれたログから検知し、変更をAmazon Redshiftへと反映します。

本ドキュメントでは、FlyData Syncの設定方法をご説明します。なお、AWSにて提供されているデータベースサービスのRDS MySQLをご利用の場合は、Amazon RDSとRedshiftの同期をご参照ください。

Amazon Redshift上でのFlyDataのアクセス許可

まずはじめに、Amazon RedshiftとFlyDataサーバ間での通信を許可するための設定を行います。この設定をすることで、FlyDataサーバがAmazon Redhisftへデータをアップロードすることができるようになります。

FlyDataサーバがAmazon Redshiftへ接続するために、FlyDataの設定画面に記載されているIPからの接続を許可する必要があります。

Redshift Security IP Addresses

これらのIPアドレスをRedshiftクラスタのエンドポイントアクセスに使用できるよう、設定してください。接続許可の設定はAmazon Virtual Private Cloud(VPC)を利用している場合と利用していない場合とで手順が異なります。次を参考に設定を進めてください。

Virtual Private Cloud (VPC)を利用している場合

まず、FlyData IPを追加するセキュリティグループを特定する必要があります。AWS ConsoleのRedshiftクラスタ詳細ページにて、VPCダッシュボードを選択し、次にSecurity Groupsを表示します。このとき検索ボックスにSecurity Group ID (例:sg-8cde8f18).を入力することで、フィルタすることができます。そして、Redshift起動時に設定したセキュリティグループを選択します。すると、下記のスクリーンショットのようにセキュリティグループの詳細が表示されます。

次にFlyDataのIPアドレスのアクセス許可を設定します。選択したセキュリティグループのページの真ん中あたりにあるInbound Rulesタブを選択し、Editボタンを押します。ダイアログボックスが表示されますので、Edit Inbound RulesAdd Ruleの順に選択し、IPアドレスをひとつずつ登録してください。ルールについては下記のように設定してください。

  • Type: Custom TCP Rule
  • Port Range: port
  • Source: [FlyData Consoleの設定ページに記載されているIPアドレス]

Typeはすべてのルールで同じものを設定してください。ポートは、Amazon Redshiftクラスタで設定した値を入力してください。デフォルトでは5439となっています。Sourceは1つ目のルールではひとつめのIPを、2つ目以降では、それぞれ2つ目、3つ目というように設定してください。すべてのIPを登録し終えたら、Saveボタンを押します。

以上でFlyDataがRedshiftクラスタにアクセスするための設定は完了です。次はMySQLを設定するの項目を参照して設定を続けてください。

VPCを利用していない場合

Amazon’s Virtual Private Cloudを使用していない場合でも、Amazon RedshiftにFlyDataのIPアドレスを登録する必要があります。AWSコンソールのRedshiftページのSecurity Groupsを選択してセキュリティグループ設定ページを開き、Amazon Redshiftクラスタにて指定されているCluster Security Groupsを選択します。

以下のようにFlyDataからの接続許可を設定してください。

  • Connection Type: CIDR/IP
  • CIDR/IP to Authorize: [FlyData Consoleの設定ページに記載されているIPアドレス]

以上でFlyDataサーバからのRedshiftクラスタへの接続が許可されました。

MySQLを設定する

次のステップでは、あなたのMySQLサーバでバイナリログを有効にします。下記パラメータを、MySQLサーバの設定ファイル(my.confmy.ini等、ご使用の環境でご確認ください)の[mysqld]セクションに追記してください。

server-id = 888888
log_bin = /file_path/mysql-bin.log  
expire_logs_days = 30
max_binlog_size = 1G
binlog_format = ROW
replicate-wild-do-table = yourdb.%
log-slave-updates = TRUE

log_binパラメータの値は、バイナリログファイルへのパスとファイル名を指定します。server-idパラメータには、レプリケーションしているサーバ間で一意となる値を指定してください。log-slave-updatesパラメータは他のデータベースのスレーブである場合、設定が必須となります。

利用しているMySQLサーバのバージョンによっては、下記の2つのパラメータの指定も必要となります。同じくMySQL設定ファイルに追記してください。

log-bin-use-v1-row-events = TRUE    # MySQL Server 5.1.56-ndb-7-0-27, 5.1.56-ndb-7.1.16 or above

設定ファイルの編集が完了しましたら、MySQLサーバを再起動し、設定を反映してください。

FlyData Sync用のアカウントを作成する

設定ファイルの編集が終了したので、次はMySQLサーバにFlyData Sync用のMySQLユーザを作成します。MySQL Workbench等を使用してMySQLサーバにmasterアカウントでログインし、FlyData Sync専用のユーザを作成してください。次のようなコマンドで作成できます。

mysql> CREATE USER 'sync'@'%' IDENTIFIED BY 'your_password';
mysql> GRANT REPLICATION SLAVE, SELECT, RELOAD, REPLICATION CLIENT, LOCK TABLES, SUPER ON *.* TO 'sync'@'%'; 
mysql> FLUSH PRIVILEGES;

your_passwordは、任意の値に変更してください。

SUPER権限は、MySQLサーバのバージョンが5.1.63以下の場合にのみ必要です。

FlyDataコンソールでAmazon Redshiftの情報を設定する

次に、FlyDataコンソールにAmazon Redshiftの情報を設定します。Amazon Redhshiftの設定をすることにより、FlyDataはMySQLのデータをAmazon Redshiftにレプリケーションすることが可能となります。WebブラウザからFlyDataコンソールへログインします。
https://console.flydata.com/

ログイン後、FlyDataコンソールの設定ページを開き、Amazon Redshiftクラスタ設定に必要な情報を入力します。接続情報は設定アカウントにのみ閲覧可能でありセキュアとなっております。オプションとして設定可能な項目はデフォルトのままで進めていただけます。

MySQLの情報をFlyDataに設定する

FlyData Syncを正しく稼働させるために、FlyDataコンソールにてMySQL Serverへの接続情報と、Amazon Redshift上でレプリケーションしたいデータベース、スキーマ、同期したいテーブル名を登録する必要があります。

FlyDataコンソールにログイン後、ダッシュボードページを開き、データエントリの追加ボタンを押下してください。データエントリ入力項目が表示されましたら、同期に必要な情報を入力します。名前の項目には任意の名称を入力してください。データソースはMySQLを選択します。

次にMySQLへの接続情報を入力します。

  • Host: MySQLサーバのホスト名
  • Port: MySQLサーバのport番号(デフォルトは3306)
  • Username: FlyDataが接続する際に使用するMySQLのユーザ名
  • Password: 上記ユーザのパスワード
  • Database: Amazon Redshiftに同期したいテーブルを持つデータベース名

テーブル: レプリケートしたいテーブル名

  • Full Sync:MySQL上で実行されたすべての INSERT/UPDATE/DELETE/ALTER TABLE を同期したいテーブルを登録します。
  • Append Only:MySQL上で実行された DELETE以外のすべてを同期させたいテーブルを登録します。
  • Schema: デフォルトのRedshiftクラスタのスキーマを利用しない場合は同期するスキーマ名を入力してください。

入力が完了したら 更新 ボタンを押して変更を保存します。

FlyData Agentをインストールする

MySQLとRedshiftの設定が終わったので、次にMySQLサーバとAmazon Redshift間を素早く通信するFlyData Agentをインストールします。

FlyData Agentをインストールするために、FlyData Consoleにログインし、ダッシュボードページにあるインストールコマンドを確認します。DevelopmentまたはProductionタブを環境に合わせて選択してください。選択後、インストールコマンドが表示されます。

インストールコマンドをコピーし、FlyData AgentをインストールするLinuxサーバにログインして実行します。インストールコマンドはroot権限か、または適切な管理者権限を必要とします。インストールは10分から15分ほどかかります。インストールが完了したら、flydataコマンドを有効にするために、次のコマンドを実行してください。

 '$ source ~/.bashrc' 

Amazon Redsfhit上にテーブルを作成するSQLを生成する

次にレプリケーションするテーブルをAmazon Redshift側に作成します。簡単に実行するため、Amazon Redshift上でテーブルを作成するSQL実行ファイルを下記の手順で生成することができます。次のコマンドをFlyData Agentがインストールされたサーバで実行してください。

$ flydata sync:generate_table_ddl > create_table.sql

このコマンドを実行すると、Amazon Redshift上に同じテーブルを作成するためのCREATE TABLE文を抽出します。データは含まれません。まずはデータを受け取るテーブルを作成する必要があるのです。このコマンドの実行結果ファイルは、テキストのスクリプトファイルとしてテーブル作成に使用することができます。

Amazon Redhisftにテーブルを作成する

Amazon Redshift上に作成するすべてのテーブルのSQL文が用意できたので、いよいよ実行します。

上記で作成されたcreate_table.sqlの内容をコピーし、FlyData Access Redshift consoleに貼り付けて実行します。 完了すると、Amazon Redshiftクラスタ上にテーブルが作成されます。

FlyData Syncを実行する

以上で、MySQLサーバ、FlyDataサーバ、そしてAmazon Redshiftの設定すべてが完了し、同期を開始する準備が整いました。次のコマンドをFlyData Agentをインストールしたサーバにて実行してください。これにより、MySQLサーバの指定されたテーブルからすべてのデータをAmazon Redshiftにコピーします。

$ flydata sync

とてもシンプルですが、初期同期が開始されます。初期同期は数分で終わることもありますが、レプリケーションするデータ量によっては数時間かかることもあります。

初期同期が完了すると、FlyData Syncの設定は完了です。この時からMySQL上のすべての更新が5分〜15分後にはAmazon Redshiftクラスタ上に反映されるようになり、いつでもAmazon上で分析に使用することができるようになります。

Redshiftへのデータ移行を自動化しませんか?

FlyDataを活用してリアルタイムでのビッグデータ分析を実現しましょう!