🕌

TiDB Essential : データ移行 (β) を試す

に公開

2026年、1月20日に TiDB Essential クラスターが MySQLからのフル+増分レプリケーションをサポートしました。

https://docs.pingcap.com/ja/tidbcloud/tidb-cloud-release-notes/
以下のデータソースをサポートしておりかなり幅広い環境からのデータ移行が可能になっています。

データ移行に際しては binlog を使用しているため、binglogフォーマットを以下にそろえる必要があります。

さっそくやってみる

移行対象に RDS MySQL を使用してみます。移行の通信経路はPublic通信の他に、PrivateLinkやVPC Peeringを利用可能ですが、この手順ではPublic IP通信を行うため、RDS MySQL クラスターをVPCのPublic Subnet内部に起動します。
TiDB の VPC Peering や PrivateLink を介した接続機能は以下を参考にしてください。
https://zenn.dev/kameoncloud/articles/d669bc94a39083
https://zenn.dev/kameoncloud/articles/ddfd51fe176bdd

1. RDS MySQL 8.0 の起動

RDS MySQL をPublic Subnetに起動します。すべてデフォルトのままで問題ないですが、以下の設定だけはへんこうして PubLicIPを付与し外部からアクセス可能にします。

起動するまでしばらく待ちます。

2. DB パラメータグループの作成

RDS MySQL ではbinlog が mix になっているためこちらをrowに変更させる必要があります。
左ペインから パラメータグループ をクリックします。

パラメータグループの作成 をクリックします。

任意の名前を付けて、エンジンタイプを MySQL Community、パラメータグループファミリーをmysql8.0、タイプをDB parameter Group をとして作成をクリックします。

作成されたら 編集ボタンをクリックして以下の値を変更します。binlog_formatをROW、binlog_row_imageをfullに変更します。


次に先ほど作成されたRDS MySQLクラスターの詳細画面から変更をクリックし今作成したパラメータグループを適応します。

ステータスが変更中になるためしばらく待ちます。

変更が完了しても、先ほど適応したパラメターグループの内容はすべてが適応されていないため、もう一度クラスターを再起動します。
再起動が完了したら以下のSQLを実行します。

SHOW VARIABLES WHERE Variable_name IN
('log_bin','server_id','binlog_format','binlog_row_image',
'binlog_expire_logs_seconds','expire_logs_days');

以下が出力されていればOKです。

+----------------------------+------------+
| Variable_name              | Value      |
+----------------------------+------------+
| binlog_expire_logs_seconds | 2592000    |
| binlog_format              | ROW        |
| binlog_row_image           | FULL       |
| expire_logs_days           | 0          |
| log_bin                    | ON         |
| server_id                  | 1877615862 |
+----------------------------+------------+

3. TiDB Essential Cluster の起動と設定

次にTiDB Essentail Cluster を起動します。すべてデフォルトのままで問題ありません。
左ペインから DataData Migrationをクリックします。

Create Migration Job をクリックします。

先ほど作成したRDS MySQLクラスターの値を指定します。

以下のコマンドを実行しCA証明書をダウンロードした後、コンソールからアップロードします。

wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem


TiDB側のUserID/Passwordを入力して Validate Connection and Next をクリックします。
フル+増分を指定します。

Essentialでは論理モードのみが指定可能ですが、Dedicatedでは物理モードも指定可能なようです。物理モードではSQLを用いずKVに直接データを書き込むため大量データの高速移行に適しているようです。
https://docs.pingcap.com/ja/tidbcloud/migrate-from-mysql-using-data-migration/#step-3-choose-migration-job-type
Next をクリックすると接続チェックが実行されます。
チェックが完了したらNextをクリックします。

ジョブの作成が開始されますので、しばらく待ちます。

ステータスがRunningになれば成功です。

4. テスト用テーブルの作成と確認

RDSで以下のSQLを実行します。

CREATE DATABASE IF NOT EXISTS test;
USE test;

CREATE TABLE `user` (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(255),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

TiDB側では以下の通りテーブルが同期され作成されています。

mysql> show databases;
+---------------------+
| Database            |
+---------------------+
| INFORMATION_SCHEMA  |
| PERFORMANCE_SCHEMA  |
| dm-meta             |
| lightning_task_info |
| mysql               |
| test                |
+---------------------+
6 rows in set (0.01 sec)

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| user           |
+----------------+
1 row in set (0.01 sec)

RDS側でテスト用データをInserするとTiDB側でも確認できます。

RDS
INSERT INTO `user` (name, email) VALUES
('Taro', 'taro@example.com'),
('Hanako', 'hanako@example.com');
TiDB
mysql> select * from user;
+----+--------+--------------------+---------------------+
| id | name   | email              | created_at          |
+----+--------+--------------------+---------------------+
|  1 | Taro   | taro@example.com   | 2026-02-01 02:11:39 |
|  2 | Hanako | hanako@example.com | 2026-02-01 02:11:39 |
+----+--------+--------------------+---------------------+
2 rows in set (0.01 sec)

Discussion