CData Syncを利用したMySQL間のデータベースレプリケーション -インストールとフルロード-

## はじめに
CData Syncを利用してMySQL間のデータベースレプリケーションを実施してみました。

今回は、MySQLをデータソースに選択している上で、レプリケーションの種類として[標準(個別設定)]を利用しているため、フルロードのレプリケーションになっています。

※2025/01時点では、MySQLをデータソースとして差分レプリケーションを実現するためには、CDC(変更データキャプチャ)機能を利用する必要があるようです。
https://www.cdata.com/jp/sync/connections/#sources
https://cdn.cdata.com/help/ASK/jp/sync/Change-Data-Capture.html
https://www.cdata.com/jp/blog/db-cdc-sync

## 構成 ※AWS環境
EC2のWindows ServerにMySQLとCData Syncを導入し、RDSのMySQLにレプリケーションを行います。

・EC2
Windows Server 2019
MySQL 8.0.40
CData Sync 24.3.9121

・RDS
MySQL 8.0.39

なお、CData Syncのライセンスは、30日間無償の評価版ライセンスを利用しています。

## 実施内容
ここからは下記の流れで手を動かしていきます。

1.CData Syncの導入
2.コネクタの設定
3.ジョブの設定
4.ジョブの実行

なお、事前にMySQLを導入したEC2のWindows ServerとRDSのMySQLを準備しています。
データソース側MySQLに準備したcdatatestというデータベースにて、yakinikuというテーブルを作成しました。
上記テーブルを同期先側MySQLに準備したcdatatest2というデータベースにレプリケーションしていきます。

### 1.CData Syncの導入
まず、下記のサイトで必要事項を入力し、インストーラと評価版のライセンスキーをメールで送付してもらいます。
https://www.cdata.com/jp/sync/download/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3977704/e247326d-b091-aaac-8b09-baeef63781c0.png)

送付されたインストーラをWindows Serverに用意し、インストーラを実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3977704/67b904cb-e65c-658e-f743-baf82845b121.png)

契約書への同意やインストール先、コンポーネント、スタートメニューフォルダの選択を既定の設定で進み、インストールを完了させます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3977704/472cc318-ce96-c32e-2c49-6978c0ea7f05.png)

※CData Syncインストール後は、Windows版では規定でサービスとして構成されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3977704/6802e327-f010-b39e-0cb6-e4fd210c00e3.png)

インストール後は下記のURLにアクセスします。
http://localhost:8181/

管理ユーザの作成を促されるため、ユーザとパスワードを入力し作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3977704/2ea3ee81-60fb-8724-0469-8733635915e9.png)

管理ユーザ作成後は、ユーザが正常に作成された旨の表示がされ、ログイン画面に移行するため、作成したユーザでログインします。

ログイン後は、ライセンス認証を行います。
[設定]のライセンスタブにて、[+ライセンスを追加]に進みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3977704/ae09cbe9-67fb-ebfb-9e16-66dcf93c2eca.png)

名前やメールアドレス、プロダクトキー(メールで送付されたライセンスキー)を入力し、利用規約に同意したうえで、入力情報の[保存]を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3977704/140c78c2-bc6e-1f8b-b881-001951cfa2db.png)

ライセンス認証が行われると、[設定]のライセンスタブにて、有効期限やライセンスキー、バージョンなどの情報を確認することができます。

### 2.コネクタの設定
各データベースへのコネクタ(接続)を設定していきます。
[接続]にて、[+接続を追加]に進みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3977704/9cbb493c-bbb7-cad9-9203-3df381b5dc57.png)

まずは、データソース側のコネクタを作成するため、データソースタブにて対象となるMySQLを検索・選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3977704/9a453706-d297-94a8-bcad-5fe527fabe75.png)

設定タブにて、接続名やサーバ、認証方法、ユーザ、データベースなどを入力し、[作成およびテスト]を行います。
※データソースとなるMySQLコネクタの設定内容の詳細は下記URLのマニュアルに記載があります。
https://cdn.cdata.com/help/ASK/jp/sync/MySQL-Source.html

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3977704/61495eb1-bd72-33ce-e3d2-450d7ad265c2.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3977704/57699638-ead8-d34c-ebe1-bb935798200a.png)

コネクタの作成とテストが完了すると、一覧に作成したコネクタが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3977704/a6f823be-256d-5738-641c-3d19e3080e53.png)

次は、同期先側のコネクタを作成するため、同期先タブにて対象となるMySQLを検索・選択した上で、設定内容を入力し、[作成およびテスト]を行います。
※同期先となるMySQLコネクタの設定内容の詳細は下記URLのマニュアルに記載があります。
https://cdn.cdata.com/help/ASK/jp/sync/MySQL-Destination.html

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3977704/68da440c-eb66-c5b2-5350-44dd5b716861.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3977704/7fa48659-2aee-a7ad-9e28-781f0bbf56e8.png)

コネクタの作成とテストが完了すると、一覧に作成したコネクタが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3977704/d1bbcea9-b910-77e5-c217-9e3b242b7964.png)

### 3.ジョブの設定
データベースレプリケーションを行うジョブを作成していきます。
[ジョブ]にて、[+ジョブを追加]-[新しいジョブを追加]に進みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3977704/84673f11-66c9-86c7-7971-39c037873e2a.png)

ジョブの名前やデータソースと同期先のコネクタ、レプリケーションの種類を入力し、[ジョブを追加]を行います。
※"はじめに"にて記載したように、今回は、MySQLをデータソースに選択している上に、レプリケーションの種類として[標準(個別設定)]を選択するため、フルロードのレプリケーションになっています。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3977704/2f876fae-f97b-fe2c-7155-c92164b697f1.png)

ジョブの作成が完了すると、一覧に作成したジョブが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3977704/513bc5db-58ae-48a3-d95a-0ec7e4e9a82c.png)

次に、ジョブにタスクを追加していきます。
一覧から対象のジョブに進み、タスクタブにて[+タスクを追加]に進みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3977704/50975999-fcab-b8a2-52db-9d5fef12a13b.png)

対象のデータベースを選択した上で、レプリケーションの対象となるテーブルを選択し、[タスクを追加(n)]を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3977704/e88cd9c3-0492-69c5-5b1b-96053f528203.png)

タスクの追加が完了すると、一覧に追加したタスクが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3977704/bebd22f3-b1c0-76b1-4818-81b1dfe489ea.png)

### 4.ジョブの実行
作成したジョブを実行していきます。
一覧から対象のジョブを選択し、タスクタブにて対象のタスクにチェックを付けたうえで、[▷実行]を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3977704/50b634a0-eb2f-8fa0-7a12-1cd412520905.png)

実行が完了すると、実行のステータスや実行日時、処理時間、影響レコード数が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3977704/4768ab23-e639-8c42-f81a-b8bf0da6e4ed.png)

また、ジョブのジョブ履歴タブでも実行内容を確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3977704/e7771f5b-3f9c-d8f0-20d6-55c075bedd99.png)

ジョブの実行が完了したため、実際にMySQLのデータベースを確認しました。
下記のように、データソース側のcdatatestデータベースのyakinikuテーブルが同期側のcdatatest2データベースにレプリケーションされていました。

```
<データソース側>
mysql> use cdatatest;
Database changed

mysql> SHOW TABLES;
+---------------------+
| Tables_in_cdatatest |
+---------------------+
| yakiniku            |
+---------------------+
1 row in set (0.42 sec)

mysql> select * from yakiniku;
+----+------+
| id | name |
+----+------+
|  1 | beef |
|  2 | pork |
+----+------+
2 rows in set (0.19 sec)
```
```
<同期先側 - レプリケーション前>
mysql> use cdatatest2;
Database changed

mysql> SHOW TABLES;
Empty set (0.02 sec)
```
```
<同期先側 - レプリケーション後>
mysql> use cdatatest2;
Database changed

mysql> SHOW TABLES;
+----------------------+
| Tables_in_cdatatest2 |
+----------------------+
| yakiniku             |
+----------------------+
1 row in set (0.00 sec)

mysql> select * from yakiniku;
+----+------+
| id | name |
+----+------+
|  1 | beef |
|  2 | pork |
+----+------+
2 rows in set (0.00 sec)
```

以上がジョブの手動実行になります。

スケジューリング実行も実施してみます。
ジョブの概要タブにて、スケジュールの[設定]に進みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3977704/a93e964c-7ca9-f64f-e634-c79efc2d12ef.png)

ジョブ実行の間隔と毎時毎分を入力し、[保存]を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3977704/6d809042-4ee4-cafd-754b-1c0c1cfec725.png)

スケジューリングが完了すると、設定した内容でスケジュールがオンになっていることや次回実行の日時が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3977704/3f95dc13-2335-afb9-5c51-8170ad12e9f9.png)

設定した実行時間に、自動でジョブが実行されていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3977704/2fc6739b-222e-34b8-d444-7c7da3d52dda.png)

## おわりに
初めてデータベースレプリケーションを行いましたが、分かりやすい公式マニュアルやハンズオン資料があったため、比較的簡単に動作を検証することができました。

次は、CData SyncのCDC機能を利用したMySQL間の差分レプリケーションを記事にする予定です。

下記は、本文記載外の参考URLです。
https://cdn.cdata.com/help/ASK/jp/sync/index.html
https://www.cdata.com/jp/blog/cdatasync-handson-2023

### ※追記 2025/01/08
CDC機能を利用したMySQL間の差分レプリケーションを記事にしました。
https://qiita.com/haflaf7843/items/65e5c7cb7c6828d2b0fd