TiDBデータ移行のクイックスタート
TiDB データ移行 (DM) 、MySQL互換データベースからTiDBにデータを複製する強力なツールです。このガイドでは、 TiUPプレイグラウンド使用して開発またはテスト用のローカルTiDB DM環境を迅速に構築する方法と、ソースMySQLデータベースからターゲットTiDBデータベースへのデータ移行という簡単なタスクを段階的に説明します。
注記:
本番への展開については、 TiUPを使用して DMクラスタをデプロイ参照してください。
ステップ1: テスト環境をセットアップする
TiUPはクラスタ運用・保守ツールです。Playground機能を使用すると、開発・テスト用にTiDBデータベースとTiDB DMを備えた一時的なローカル環境を迅速に起動できます。
TiUPをインストールします:
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh注記:
既にTiUPがインストールされている場合は、フラグ
--dm-masterと--dm-worker使用するには、v1.16.1 以降にアップデートされていることを確認してください。現在のバージョンを確認するには、次のコマンドを実行します。tiup --versionTiUP を最新バージョンにアップグレードするには、次のコマンドを実行します。
tiup update --selfターゲット TiDB データベースと DM コンポーネントを使用してTiUP Playground を起動します。
tiup playground v8.5.3 --dm-master 1 --dm-worker 1 --tiflash 0 --without-monitor出力で TiDB と DM が実行されているかどうかを確認して環境を確認します。
TiDB Playground Cluster is started, enjoy! Connect TiDB: mysql --host 127.0.0.1 --port 4000 -u root Connect DM: tiup dmctl --master-addr 127.0.0.1:8261 TiDB Dashboard: http://127.0.0.1:2379/dashboard現在のターミナルで
tiup playgroundを実行したままにして、次の手順のために新しいターミナルを開きます。このプレイグラウンド環境は、ターゲットTiDBデータベースとレプリケーションエンジン(DMマスターとDMワーカー)の実行プロセスを提供します。MySQL(ソース)→ DM(レプリケーションエンジン)→ TiDB(ターゲット)というデータフローを処理します。
ステップ2: ソースデータベースを準備する(オプション)
ソースデータベースとして、1つ以上のMySQLインスタンスを使用できます。MySQL互換インスタンスを既にお持ちの場合は、 ステップ3に進んでください。そうでない場合は、以下の手順に従ってテスト用のインスタンスを作成してください。
Docker を使用すると、テスト用の MySQL 8.0 インスタンスをすばやくデプロイできます。
MySQL 8.0 Docker コンテナを実行します。
docker run --name mysql80 \ -e MYSQL_ROOT_PASSWORD=MyPassw0rd! \ -p 3306:3306 \ -d mysql:8.0MySQLに接続します。
docker exec -it mysql80 mysql -uroot -pMyPassw0rd!DM テストに必要な権限を持つ専用ユーザーを作成します。
CREATE USER 'tidb-dm'@'%' IDENTIFIED WITH mysql_native_password BY 'MyPassw0rd!'; GRANT PROCESS, BACKUP_ADMIN, RELOAD, REPLICATION SLAVE, REPLICATION CLIENT, SELECT ON *.* TO 'tidb-dm'@'%';サンプルデータを作成します。
CREATE DATABASE hello; USE hello; CREATE TABLE hello_tidb ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) ); INSERT INTO hello_tidb (name) VALUES ('Hello World'); SELECT * FROM hello_tidb;
macOS では、 Homebrew使用して MySQL 8.0 をローカルにすばやくインストールして起動できます。
Homebrewを更新し、MySQL 8.0 をインストールします。
brew update brew install mysql@8.0MySQL コマンドをシステム パスでアクセスできるようにします。
brew link mysql@8.0 --forceMySQL サービスを開始します。
brew services start mysql@8.0rootユーザーとして MySQL に接続します。mysql -urootDM テストに必要な権限を持つ専用ユーザーを作成します。
CREATE USER 'tidb-dm'@'%' IDENTIFIED WITH mysql_native_password BY 'MyPassw0rd!'; GRANT PROCESS, BACKUP_ADMIN, RELOAD, REPLICATION SLAVE, REPLICATION CLIENT, SELECT ON *.* TO 'tidb-dm'@'%';サンプルデータを作成します。
CREATE DATABASE hello; USE hello; CREATE TABLE hello_tidb ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) ); INSERT INTO hello_tidb (name) VALUES ('Hello World'); SELECT * FROM hello_tidb;
CentOS などのエンタープライズ Linux ディストリビューションでは、MySQL Yum リポジトリから MySQL 8.0 をインストールできます。
MySQL Yumリポジトリのダウンロードページから MySQL Yum リポジトリ パッケージをダウンロードしてインストールします。Linux バージョン 9 以外の場合は、次の URL の
el9(Enterprise Linux バージョン 9) を置き換え、MySQL バージョン 8.0 の場合はmysql80そのままにする必要があります。sudo yum install -y https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpmMySQLをインストールします。
sudo yum install -y mysql-community-server --nogpgcheckMySQLを起動します。
sudo systemctl start mysqldMySQL ログで一時的な root パスワードを見つけます。
sudo grep 'temporary password' /var/log/mysqld.log一時パスワードを使用して
rootユーザーとして MySQL に接続します。mysql -uroot -prootパスワードをリセットします:ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyPassw0rd!';DM テストに必要な権限を持つ専用ユーザーを作成します。
CREATE USER 'tidb-dm'@'%' IDENTIFIED WITH mysql_native_password BY 'MyPassw0rd!'; GRANT PROCESS, BACKUP_ADMIN, RELOAD, REPLICATION SLAVE, REPLICATION CLIENT, SELECT ON *.* TO 'tidb-dm'@'%';サンプルデータを作成します。
CREATE DATABASE hello; USE hello; CREATE TABLE hello_tidb ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) ); INSERT INTO hello_tidb (name) VALUES ('Hello World'); SELECT * FROM hello_tidb;
Ubuntu では、公式の Ubuntu リポジトリから MySQL をインストールできます。
パッケージリストを更新します:
sudo apt-get updateMySQLをインストールします。
sudo apt-get install -y mysql-servermysqlサービスが実行されているかどうかを確認し、必要に応じてサービスを開始します。sudo systemctl status mysql sudo systemctl start mysqlソケット認証を使用して
rootユーザーとして MySQL に接続します。sudo mysqlDM テストに必要な権限を持つ専用ユーザーを作成します。
CREATE USER 'tidb-dm'@'%' IDENTIFIED WITH mysql_native_password BY 'MyPassw0rd!'; GRANT PROCESS, BACKUP_ADMIN, RELOAD, REPLICATION SLAVE, REPLICATION CLIENT, SELECT ON *.* TO 'tidb-dm'@'%';サンプルデータを作成します。
CREATE DATABASE hello; USE hello; CREATE TABLE hello_tidb ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) ); INSERT INTO hello_tidb (name) VALUES ('Hello World'); SELECT * FROM hello_tidb;
ステップ3: TiDB DMソースを構成する
ソースMySQLデータベースを準備したら、TiDB DMをそのデータベースに接続するための設定を行います。そのためには、接続の詳細を含むソース設定ファイルを作成し、 dmctlツールを使用して設定を適用します。
ソース構成ファイル
mysql-01.yamlを作成します。注記:
この手順では、 ステップ2で説明されているように、ソース データベースにレプリケーション権限を持つ
tidb-dmユーザーがすでに作成されていることを前提としています。source-id: "mysql-01" from: host: "127.0.0.1" user: "tidb-dm" password: "MyPassw0rd!" # In production environments, it is recommended to use a password encrypted with dmctl. port: 3306DM データ ソースを作成します。
tiup dmctl --master-addr 127.0.0.1:8261 operate-source create mysql-01.yaml
ステップ4: TiDB DMタスクを作成する
ソースデータベースを設定したら、TiDB DM で移行タスクを作成できます。このタスクは、ソース MySQL インスタンスを参照し、ターゲット TiDB データベースへの接続詳細を定義します。
DMタスク構成ファイル
tiup-playground-task.yamlを作成します。# Task name: tiup-playground-task task-mode: "all" # Execute all phases - full data migration and incremental sync. # Source (MySQL) mysql-instances: - source-id: "mysql-01" ## Target (TiDB) target-database: host: "127.0.0.1" port: 4000 user: "root" password: "" # If the password is not empty, it is recommended to use a password encrypted with dmctl.構成ファイルを使用してタスクを開始します。
tiup dmctl --master-addr 127.0.0.1:8261 start-task tiup-playground-task.yaml
ステップ5: データ複製を確認する
移行タスクを開始したら、データレプリケーションが期待どおりに動作しているかどうかを確認します。1 dmctlを使用してタスクのステータスを確認し、ターゲット TiDB データベースに接続して、ソース MySQL データベースからデータが正常に複製されていることを確認します。
TiDB DM タスクのステータスを確認します。
tiup dmctl --master-addr 127.0.0.1:8261 query-statusターゲット TiDB データベースに接続します。
mysql --host 127.0.0.1 --port 4000 -u root --prompt 'tidb> '複製されたデータを確認します。1 ステップ2サンプルデータを作成した場合、MySQLソースデータベースからターゲットTiDBデータベースに複製されたテーブル
hello_tidbが表示されます。SELECT * FROM hello.hello_tidb;出力は次のようになります。
+----+-------------+ | id | name | +----+-------------+ | 1 | Hello World | +----+-------------+ 1 row in set (0.00 sec)
ステップ6: クリーンアップ(オプション)
テストが完了したら、 TiUP Playground を停止し、ソース MySQL インスタンス (テスト用に作成された場合) を削除し、不要なファイルを削除することで、環境をクリーンアップできます。
TiUP Playgroundを停止します。
TiUP Playground が実行中のターミナルで、 Control + Cを押してプロセスを終了します。これにより、すべての TiDB および DM コンポーネントが停止し、ターゲット環境が削除されます。
ソース MySQL インスタンスを停止して削除します。
ステップ2でテスト用のソース MySQL インスタンスを作成した場合は、次の手順に従ってそれを停止し、削除します。
Docker コンテナを停止して削除するには:
docker stop mysql80 docker rm mysql80テスト目的のみでHomebrewを使用して MySQL 8.0 をインストールした場合は、サービスを停止してアンインストールします。
brew services stop mysql@8.0 brew uninstall mysql@8.0注記:
すべての MySQL データ ファイルを削除する場合は、MySQL データ ディレクトリ (通常は
/opt/homebrew/var/mysqlにあります) を削除します。テスト目的のみで MySQL Yum リポジトリから MySQL 8.0 をインストールした場合は、サービスを停止してアンインストールします。
sudo systemctl stop mysqld sudo yum remove -y mysql-community-server注記:
すべての MySQL データ ファイルを削除する場合は、MySQL データ ディレクトリ (通常は
/var/lib/mysqlにあります) を削除します。テスト目的のみで公式 Ubuntu リポジトリから MySQL をインストールした場合は、サービスを停止してアンインストールします。
sudo systemctl stop mysql sudo apt-get remove --purge -y mysql-server sudo apt-get autoremove -y注記:
すべての MySQL データ ファイルを削除する場合は、MySQL データ ディレクトリ (通常は
/var/lib/mysqlにあります) を削除します。TiDB DM 構成ファイルが不要になった場合は削除します。
rm mysql-01.yaml tiup-playground-task.yamlTiUPが不要になった場合は、アンインストールできます。
rm -rf ~/.tiup
次は何?
テスト環境でソース MySQL データベースからターゲット TiDB データベースにデータを移行するタスクを正常に作成したので、次の操作を実行できます。
- 探索TiDB DM の機能
- TiDB DMアーキテクチャについて学ぶ
- セットアップ概念実証または本番環境用の TiDB DM
- 高度な設定DMタスク