LoginSignup
8
3

PlanetscaleからTiDB Serverlessにデータを移行する

Last updated at Posted at 2024-03-07

はじめに

PlanetscaleのHobbyプランが4月8日に終了することが発表されました。

TiDB Serverless は、同じくMySQL互換のサーバレスデータベースで、クレジットカード不要で無料枠があります。 移行先として是非利用を検討してみてください。

PlanetscaleからTiDB Serverlessへのデータ移行方法について紹介していきます。

移行手段

TiDBもMySQL互換のため、基本的にはMySQLツール群、SQLが利用できますが、移行に関しては二点考慮点があります。

Planetscaleはsqlでのデータ出力に10万行の制限があります。このため、このデータ量を超える場合は単純なmysqldump & mysqlimportでの移行はできません。

TiDB Serverlessは現時点でMySQL 5.7互換のv7.1.1です。そのため、Planetscaleの標準COLLATIONのutf8mb4_0900_ai_ci に対応していません。

この記事では、これらを考慮した移行方法をご紹介したいと思います。利用環境はMacOSを想定していますが、Bash/Zshコンソールが利用出来る環境であれば同じ手順で移行できると思います。

前提条件

  • Bash/Zshが利用できること
  • pscale CLI がインストール済みであること
  • MySQL clientがインストール済みであること

移行手順

データのエクスポート

データのエクスポートには、pscale cliを利用します。pscale database dump [db] [branch] です。

> pscale database dump testdb2 main
Starting to dump all tables from database testdb2 to folder /Users/bohnen/.../pscale_dump_testdb2_main_20240307_164703
Dumping is finished! (elapsed time: 6.782051792s)

今回は700MBくらいのデータを利用しましたが、10万行の制限を超えていても問題なくダウンロードできています。

データは、新しく作成されたディレクトリの中に、スキーマファイルとデータファイルの形でエクスポートされています。

> ls
metadata 
testdb2.history-schema.sql
testdb2.new_order.00001.sql
testdb2.stock-schema.sql
...

基本的にはこのsqlを順次実行すれば、データ移行は完了します。

スキーマの変更

TiDB Serverlessではまだutf8mb4_0900_ai_ciに対応していないので、一律変換します。

TiDB Dedicatedで提供されている最新のLTS, v7.5.1ではutf8mb4_0900_ai_ciはサポートされています。詳細は公式Docを参照してください。

cd [exportしたディレクトリ]
for f in *-schema.sql; do sed -i -e  's/0900_ai_ci/bin/' $f; done;

データベースの作成

TiDB Serverlessクラスタを起動しておきます。
TiDBに接続して、データのインポート先であるデータベーススキーマを作成しておきます。

TiDB Serverlessが初めての方は、こちらの入門記事をご覧ください

Chat2Queryで作成してもよし、MySQL clientで接続してもよいです。

CREATE DATABASE [データベース名];

テーブルの作成

schema.sql を流していきます。TiDB Serverlessへ MySQL clientで接続していきます。

for f in *-schema.sql; 
do mysql --comments -u [user] -h gateway01.ap-northeast-1.prod.aws.tidbcloud.com -P 4000 -D [database] --ssl-mode=VERIFY_IDENTITY --ssl-ca=/etc/ssl/cert.pem -p[password] < $f ; 
done;

※実際は一行ですが見やすさのために改行しています。[user][password][database]はご自身のものをご利用ください。

データのインポート

同様に、00001.sql を流していきます。

for f in *[0-9].sql; 
do mysql --comments -u [user] -h gateway01.ap-northeast-1.prod.aws.tidbcloud.com -P 4000 -D [database] --ssl-mode=VERIFY_IDENTITY --ssl-ca=/etc/ssl/cert.pem -p[password] < $f ; 
done;

これで完了です。

消費RU確認

TiDB Serverlessは5GB、5000万RU(Request Unit)分は無料です。

このRUの計算は難しいですが、だいたい書込容量に等しいです。今回700MB程度のデータをImportしてみた消費RUを確認してみます。

image.png

これは他のデータが元々700MBほど入っていたクラスタなのでストレージ容量は正確ではありませんが、

  • 今回消費したRUは7.42M
  • 消費したRow-based Storageは500MB強(TiDBでの圧縮後)

となりました。データインポート後もまだまだ無料でご利用いただけます。

是非、TiDB Serverlessを使ってみてください。

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3