kintone データをポイント＆クリック操作でRDB(MySQL) に複製（レプリケーション）を作成

# はじめに

本記事では、サイボウズ株式会社が提供している、webデータベース型の業務アプリ構築クラウドサービス [kintone](https://kintone.cybozu.co.jp/)に蓄積されたデータを、CData Sync製品を使ってMySQLやSQLServerなどのRDBにバックアップ＆レプリケーション（複製）を作成する手順をご紹介します。

# 実現イメージ

![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/a0e1f92f-9853-6ec3-22eb-4ec06973672e.png)


本手順では、ポイント＆クリック操作でSaasデータをデータベースに複製を作成するサーバー製品である　CData Software社のCData Syncを使用します。製品の詳細は[こちらのページ](https://www.cdata.com/jp/sync/)をご覧ください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/019f78f0-2531-23b5-81fe-9e8a17bba099.png)

# 前提

本手順で必要な環境が必要となります。

- Windowsマシン、もしくは、Tomcatが動作しているWin/Mac/Linuxマシン
- kintoneのアカウント
- Windowsマシンの場合、管理者権限が付与されており、プログラムのインストールが可能であること
- MySQL、および、WorkBenchが使用可能であること
- Postman (*[管理用WebAPIの利用](https://qiita.com/drafts/9f2cf1400100d1f5fa24/edit#%E7%AE%A1%E7%90%86%E7%94%A8webapi%E3%81%AE%E5%88%A9%E7%94%A8) のみ)


# 手順

## CData Syncのインストール

最新版ビルドは、こちらのURLよりダウンロードください。
- [Windows(.NET)版](https://cdatajbuilds.s3-ap-northeast-1.amazonaws.com/CData/20190903_DataSyncNet.zip)
- [Cross-Platform(Java)版](https://cdatajbuilds.s3-ap-northeast-1.amazonaws.com/CData/20190903_DataSyncJava.zip)

CData Syncは、下記のURL[こちらのページ](https://www.cdata.com/jp/sync/download/)からダウンロード可能です。Windows(.NET)版と、Cross-Platform(Java)版が選択可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/ea2e425f-37a0-1432-635b-b992e91210b8.png)

### Windows(.NET)版の場合

Windows(.NET)版には、組み込みWebサーバ機能がビルトインされているのでIISや他のWebアプリケーションサーバの設定は不要です。setup.exeをダウンロードして、ウィザードに従ってインストールしてください。途中、管理者のパスワードの設定が必要となりますので、任意のパスワードを入力してインストーラを完了します。完了すると、Windowsのステータスバーに、CData Data Syncのアイコンが表示され、自動でデフォルトブラウザでCData Syncのログイン画面が起動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/7d824425-85f1-8873-7129-8f48e233cc6e.png)

### Cross-Platform(Java)版の場合

Cross-Platform(Java)版の場合は、TomcatなどのJavaのアプリケーションサーバーに配布（デプロイ）することで利用可能です。setup.zipをダウンロードして、中に含まれるdatasync.warをデプロイしてください。Tomcat にWAR ファイルを配布するにはいくつかのオプションがあります。

- Webapps フォルダにWAR ファイルをコピーする。
- Tomcat の管理コンソールの中でWAR ファイルの配布を行う。

Tomcat のドキュメントには、この方法のさらに詳しい説明があります。WAR ファイルがTomcat のファイルアップロードに許可されているデフォルトの最大サイズを超えている可能性があります。デプロイメント中のエラーを解決するために、Manager アプリケーションのWEB.XML ファイルを変更して、より大きなファイルを許可することができます。Tomcat の設定に応じて、このファイルは'/usr/share/tomcat7-admin/manager/WEB-INF'、または別の類似ディレクトリにあります。このファイルでは、許容される最大ファイルサイズをビット単位で変更できます。例えば、200 MB のWAR ファイルのデプロイメントを許容するには、次の値を変更して許容される最大ファイルサイズを変更します。 

```
<multipart-config>
<!-- 200MB max -->
<max-file-size>209715200</max-file-size>
<max-request-size>209715200</max-request-size>
<file-size-threshold>0</file-size-threshold>
</multipart-config>
```

Tomcat ユーザーにCData Data Sync へのアクセスを許容
本製品 の管理者となる人に、"cdata_admin"ロールをアサインします。Tomcat のデフォルトのユーザーレルムを使用している場合は、CATALINA_BASE/conf/tomcat-users.xml にあるtomcat-user.xml ファイルを編集することで、これらのロールを追加することができます。 次の例では、管理ユーザーは、本製品 への管理アクセスのために必要なロールを与えられています。 

```
<user name="admin" password="admin" roles="cdata_admin,admin-gui,manager-gui,manager-status,manager-script,manager-jmx" />
```

データディレクトリ権限の設定
Java servlet container を実行するプロセスのユーザーに、データディレクトリへの読み/書きのアクセス権限を許可してください。
- Windows:C:\ProgramData\CData\datasync\
- Unix or Mac OS X: ~/cdata/datasync/
Tomcat サーバーを再起動して、変更を反映します。 これで本製品にログインできます。任意のURL （例：http://localhost:8080/datasync） にアクセスするとCData Syncのログイン画面が起動します。


## CData Sync製品のライセンスアクティベーション

ブラウザでCData Syncのログイン画面を開きます。Windows(.NET)版の場合は、「admin/ (インストーラで指定)」、Cross-Platform(Java)版の場合はtomcat-users.xmlで定義したユーザ情報を使用して、ログインします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/77c0ba6f-e023-1599-73a8-05f0860601bb.png)

初めてログインすると「情報」タブが開きますので、ライセンスを保有している場合は「新しいライセンスをインストール」をクリックしてライセンスキーを入力してアクティベーションを行ってください。評価版をご利用の場合は「30日間の評価版をアクティベート」をクリックして名前とEメールといった必要情報を入力して使用許諾契約書に同意してアクティベーションを実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/1b2eb5de-32b1-7e37-9847-5d393b14d743.png)

cdata.comサーバにアクセス出来ないネットワーク環境の場合は、オフラインでのアクティベーション手順をお伝えしますので[テクニカルサポート](https://www.cdata.com/jp/support/submit.aspx)までお問い合わせください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/2a01ea11-c784-2131-9ec7-c68a1e13344f.png)

アクティベーションが完了すると、「ライセンス情報 > プロダクトキー」がセットされます。評価版の場合は、30日間のうちの残り日数を確認することが出来ます。


## 接続の設定

「CONNECTIONS」タブを開きます。「データソース」タブ内のクラウドアプリケーションからkintoneを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/eeb3c20b-8c5f-bdd5-6722-1ec29f070daa.png)

こちらの画面にない場合は「ここをクリックして」リンクからコネクタを追加することが出来ます。検索ウィンドウで「kintone」と検索してダウンロード＆インストールします。インストール後、ログイン画面に戻ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/91e2fc0e-869f-2d73-0087-265ef3be1263.png)

kintoneへの接続情報を設定して、「テスト接続」で成功することを確認出来たら「変更を保存」ボタンをクリックして保存します。

| 設定項目 | 設定値 |
|:-----------------|------------------|
| User | kintoneへのログインユーザ |
| Password | kintoneへのログインパスワード |
| Url | kintoneのサブドメイン含むサイトURL（例：https://\*\*\*\*.cybozu.com）　※https://\*\*\*\*.cybozu.com/k/の「/k」は不要 |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/d197f326-3080-5af5-1bee-bce5cb3b1848.png)

（注意）kintoneのセキュアアクセスやプロキシサーバ経由でkintoneにアクセスしている場合には、別途、Advancedタブでの設定が必要となります。

続いて、同期先のRDBへの接続情報を設定します。レプリケーション先のデータベースを「Destinations」から選択します。今回はMySQLを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/ae088bb8-114b-aff4-d245-cc6587de8eb6.png)

MySQLへの接続情報を設定して、「テスト接続」で成功することを確認出来たら「変更を保存」ボタンをクリックして保存します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/7b18b4e5-2a0f-29b2-641c-d632414d639c.png)

*事前にMySQLのスキーマ（データベース）を作成しておく必要があります。


データソースのkintoneと同期先のMySQLの接続設定が揃いました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/4b5e6bc3-377f-9ca1-28d6-f3d690c10cf1.png)


## 実行ジョブの設定

「ジョブ」タブに移り、「+ジョブを追加...」ボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/3d9e7d6d-39ce-d984-4e1a-1c2008ffa513.png)


ジョブ名に任意な名前をつけ、ソース：[Kintone]、同期先:[MySQL]を選択し、kintone内のどのテーブル（アプリ）のレプリケーションを作成するかを選択するために「+テーブルを追加」ボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/23c53589-6de8-73c5-9cd4-9a879fb712e1.png)

kintone内のアプリ（テーブル）の一覧が表示されるので、今回は「営業支援パック」の「顧客管理・案件管理・活動履歴」を選択して「+選択したテーブルを追加」ボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/9ff7dbe4-41a3-a0c2-fa8e-6954da354e57.png)

「テーブル」タブに上記で追加したアプリ（テーブル）が追加されていることを確認して、右上の「変更を保存」ボタンをクリックしてジョブ定義を保存します。
それでは、ジョブを実行して見ましょう。追加されたテーブルを選択して、「実行」ボタンをクリックします。「The job started runnnning...」というメッセージが表示されて実行されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/005f907f-c803-5af8-0da9-24cfc85230e2.png)

実行が正常に完了すると「The job [job name] has completed.」といったメッセージが表示され、各テーブルのステータス列を見ると追加されたレコード件数が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/007bb3e5-2aa0-687c-8614-b1e2ac81f702.png)

レプリケート先のMySQLの管理コンソール（MySQL Workbench）からアクセスすると、テーブルが作成されていることを確認できます。試しに「顧客管理（営業支援パック）」テーブルのデータをSELECT文で取得して確認してみます。kintone内のデータのレプリカが出来ていることを確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/5cb999c1-25d1-51b4-66d4-01dd9a8dff51.png)

作成したJobを30分間隔で実行するといったスケジュール実行の設定を行います。設定したら「変更を保存」してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/f1b07f3e-3d76-9985-19c3-c2b6d209036f.png)

kintone側の該当アプリのデータを追加や変更してみてください。本スケジュールされたJobは追加・変更されたレコードのみ処理の対象をするので、スケジュールされたジョブでは、追加・変更されたレコードのみ処理されたことを確認できます。追加・変更がなけば下記のように「Records affected:0」となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/9adddd90-3b3f-3999-03cd-c15f8ca51f2b.png)

## 管理用WebAPIの利用

コネクションの作成やジョブの実行など管理機能で出来る操作は、WebAPIからも利用出来ます。まずはじめに、WebAPIでアクセスする際のアクセストークンを生成します。「設定」タブ > 「Security」タブ > 「ユーザー権限」からAPIアクセスユーザを追加します。生成された認証トークンは後で利用するので手元に控えておいてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/c04fed4c-b37a-2768-5666-8d4855cfcf44.png)

また、外部マシンからAPIアクセスしてみる場合は、「信頼されたIPアドレス」にアクセスする側のマシンのIPアドレスをセットください。「*（アスタリスク）」を設定するとどのマシンからでもアクセス出来るようになります。

画面上の「ヘルプ（もしくはAPI）」タブを開きます。本画面にAPIのエンドポイントのリストおよびリファレンスが記載されています。例えば、リソース内の「/api.rsc/connections」エンドポイントは、接続コネクションの情報を一覧取得したり、接続コネクションを作成するエンドポイントです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/5d706cd2-5cbd-19fd-052e-cd0344ee2e44.png)

実際にPostmanなどからAPIを叩くとJSONレスポンスで返ってきます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/5f55d597-258b-0e03-ce86-3c6d9ef34a85.png)

「/api.rsc/executejob」をPOSTメソッドでJobを起動することもできます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123181/7e4d9399-8c59-fca7-a309-6b9cfa894941.png)

# 文字化け問題

## ジョブ設定画面のテーブル名、および、クエリが文字化けする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/1f1cc0bf-b217-21b1-cd31-fcfdcf3df0c5.png)

（発生条件）　Cross-Platform(Java)版でTomcatをご利用の場合
（解決策）　bin配下のcatalina.batの「set JAVA_OPTS=%JAVA_OPTS%」に「Dfile.encoding=UTF-8」を追加してエンコーディングを変更してください。

```
set JAVA_OPTS=%JAVA_OPTS% -Xms256m -Xmx512m -XX:MaxPermSize=256m -Dfile.encoding=UTF-8
```

## ジョブ実行結果のステータスが??????でエラーが発生してジョブが失敗する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123181/6cd957f6-0e8c-9034-5b38-1b9ea29d4dcd.png)


（発生条件）　RDS、macOSのMySQLを使用する場合
（解決策）　MySQLのエンコーディングをUTF8にあわせてください


# まとめ

CData Sync製品を利用した、ポイント＆クリック設定だけで、kintoneデータをRDB(MySQL)に複製（レプリケーション）を作成する手順でした。CData社のWebサイトから30日間ご試用いただける無償評価版がございますので是非ご試用ください。