メインコンテンツへスキップ

既存のMySQLデータベースからデータをインポートする

このガイドでは、既存のMySQLデータベースからPrisma Postgresにデータをインポートするためのステップバイステップの手順を説明します。

この移行は4つのステップで実行できます

  1. 新しいPrisma Postgresデータベースを作成します。
  2. ダイレクト接続を使用してPrisma Postgresインスタンスに直接接続します。
  3. pgloaderを使用してMySQLデータをPrisma Postgresに移行します。
  4. PrismaプロジェクトをPrisma Postgres用に構成します。

前提条件

  • 既存のMySQLデータベースへの接続URL。
  • Prismaアカウント。
  • Node.js 18+がインストールされていること。
  • pgloaderがインストールされていること。

この移行は、別のGit開発ブランチで試すことをお勧めします。

1. 新しいPrisma Postgresデータベースを作成する

新しいPrisma Postgresデータベースを作成するには、以下の手順に従ってください

  1. Prismaにログインし、コンソールを開きます。
  2. 任意のワークスペースで、New projectボタンをクリックします。
  3. Nameフィールドにプロジェクトの名前を入力します(例:hello-ppg)。
  4. Prisma Postgresセクションで、Get startedボタンをクリックします。
  5. Regionドロップダウンで、現在の場所から最も近いリージョンを選択します(例:US East (N. Virginia))。
  6. Create projectボタンをクリックします。

データベースがプロビジョニングされたら、Prisma Postgresのダイレクト接続文字列を見つけます

  1. アクティブなPrisma Postgresインスタンスに移動します。
  2. プロジェクトのサイドナビでAPI Keysタブをクリックします。
  3. Create API keyボタンをクリックします。
  4. ポップアップで、APIキーのNameを入力し、Createをクリックします。
  5. postgres://で始まる接続文字列をコピーします。これがダイレクト接続文字列です。

接続文字列を保存します。次のステップで必要になります。

2. Prisma Postgresインスタンスに直接接続する

このステップでは、ダイレクト接続を使用してPrisma Postgresインスタンスに接続します。

ステップ1で取得したPrisma Postgres接続URLが必要です。

prisma+postgres://accelerate.prisma-data.net/?api_key=ey...

3. pgloaderを使用してMySQLデータをPrisma Postgresに移行する

Prisma Postgresインスタンスへのアクティブな接続が確立されたので、pgloaderを使用してMySQLデータベースからPrisma Postgresにデータをエクスポートします。

別のターミナルウィンドウを開き、config.loadファイルを作成します

touch config.load

お好みのテキストエディタでconfig.loadファイルを開き、以下の設定をコピー&ペーストします

config.load
LOAD DATABASE
FROM mysql://username:password@host:PORT/database_name
INTO postgres://__USER__:__PASSWORD__@postgres.prisma-data.net:5432/?sslmode=require

WITH quote identifiers, -- preserve table/column name case by quoting them
include drop,
create tables,
create indexes,
reset sequences

ALTER SCHEMA 'database_name' RENAME TO 'public';

config.loadファイルで以下の詳細を必ず更新してください

  • FROM URL(MySQLデータベースURL)
    • usernamepasswordhostPORTdatabase_nameを実際のMySQLデータベース接続詳細に置き換えます。
    • SSLが必要な場合は、接続文字列にuseSSL=trueが含まれていることを確認してください。例:mysql://username:password@host:PORT/database_name?useSSL=true。PlanetScaleを使用する場合、sslaccept=strictを追加しても機能しないことに注意してください。
  • INTO URL(PostgresデータベースURL)
    • 上記のダイレクト接続文字列で、__USER____PASSWORD__のプレースホルダーを置き換えて更新します。
  • ALTER SCHEMA 'database_name' RENAME TO 'public';内のdatabase_nameを、MySQL接続文字列内のdatabase_nameと完全に一致するように更新します。

更新された認証情報で設定ファイルを保存したら、同じターミナルウィンドウで次のコマンドを実行します

pgloader config.load

データが正常に移行されたことを確認する、以下のようなログが表示されるはずです

LOG report summary reset
table name errors rows bytes total time
------------------------- --------- --------- --------- --------------
fetch meta data 0 9 2.546s
Create Schemas 0 0 0.325s
Create SQL Types 0 0 0.635s
Create tables 0 6 5.695s
Set Table OIDs 0 3 0.328s
------------------------- --------- --------- --------- --------------
public.post 0 8 0.5 kB 4.255s
public."user" 0 4 0.1 kB 2.775s
public._prisma_migrations 0 1 0.2 kB 4.278s
------------------------- --------- --------- --------- --------------
COPY Threads Completion 0 4 5.095s
Index Build Completion 0 5 9.601s
Create Indexes 0 5 4.116s
Reset Sequences 0 2 4.540s
Primary Keys 0 3 2.917s
Create Foreign Keys 0 1 1.121s
Create Triggers 0 0 0.651s
Install Comments 0 0 0.000s
------------------------- --------- --------- --------- --------------
Total import time ✓ 13 0.8 kB 28.042s

このような出力が表示された場合、データがPrisma Postgresインスタンスに正常にエクスポートされたことを意味します。

Prisma Studioを使用して、移行が成功したかどうかを確認することもできます。

npx prisma studio

4. PrismaプロジェクトをPrisma Postgres用に構成する

データを移行した後、PrismaプロジェクトをPrisma Postgresで動作するようにセットアップする必要があります。手順は、Prisma ORMをすでに使用していたかどうかによって異なります。

以前にPrisma ORMを使用していなかった場合

プロジェクトディレクトリでnpx prisma initを実行して、プロジェクトにPrismaを初期化します。これにより、prismaフォルダとschema.prismaファイル、および.envファイル(存在しない場合)が作成されます。

生成された.envファイルで、DATABASE_URLステップ1で取得したPrisma Postgres接続文字列に一致するように更新します。

.env
DATABASE_URL="prisma+postgres://accelerate.prisma-data.net/?api_key=__API_KEY__"

次のコマンドを実行して、新しく移行したデータベースをイントロスペクトします

npx prisma db pull

このコマンドは、移行したテーブルを表すモデルでschema.prismaファイルを更新し、Prisma Clientを使用してデータをクエリしたり、Prisma Migrateを使用して将来の変更を管理したりできるようになります。

おめでとうございます!MySQLデータベースをPrisma Postgresに正常に移行し、Prismaプロジェクトを構成しました。これで移行チュートリアルは完了です。

PrismaとPrisma Postgresの入門に関する包括的なガイドについては、PrismaとPrisma Postgresでゼロから始めるを参照してください。

すでにPrisma ORMを使用していた場合

schema.prismaファイルで、datasourceブロックのprovidermysqlからpostgresqlに変更します。

schema.prisma
datasource db {
provider = "mysql"
provider = "postgres"
url = env("DATABASE_URL")
}

生成された.envファイルで、DATABASE_URLステップ1で取得した新しいPrisma Postgres接続文字列に一致するように更新します。

.env
DATABASE_URL="prisma+postgres://accelerate.prisma-data.net/?api_key=__API_KEY__"

新しく移行したPrisma Postgresデータベースをイントロスペクトし、Prisma Clientを生成します

npx prisma db pull

このコマンドは、新しいデータベーススキーマに基づいてPrismaモデルを更新します。

以前にPrisma Migrateを使用していた場合

おめでとうございます!MySQLデータベースをPrisma Postgresに正常に移行し、Prismaプロジェクトを構成しました。これで移行チュートリアルは完了です。

移行中に問題が発生した場合は、お気軽にDiscordまたはXでご連絡ください。

© . All rights reserved.