TiDB Essential : データ移行 (β) を試す
2026年、1月20日に TiDB Essential クラスターが MySQLからのフル+増分レプリケーションをサポートしました。
以下のデータソースをサポートしておりかなり幅広い環境からのデータ移行が可能になっています。

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

さっそくやってみる
移行対象に RDS MySQL を使用してみます。移行の通信経路はPublic通信の他に、PrivateLinkやVPC Peeringを利用可能ですが、この手順ではPublic IP通信を行うため、RDS MySQL クラスターをVPCのPublic Subnet内部に起動します。
TiDB の VPC Peering や PrivateLink を介した接続機能は以下を参考にしてください。
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 を起動します。すべてデフォルトのままで問題ありません。
左ペインから Data→ Data 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に直接データを書き込むため大量データの高速移行に適しているようです。
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側でも確認できます。
INSERT INTO `user` (name, email) VALUES
('Taro', 'taro@example.com'),
('Hanako', 'hanako@example.com');
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