从现有数据库导入
本指南提供将数据从现有 MySQL 数据库导入 Prisma Postgres 的分步说明。
您可以通过四个步骤完成此迁移
- 创建一个新的 Prisma Postgres 数据库。
- 使用
@prisma/ppg-tunnel
包直接连接到 Prisma Postgres 实例。 - 使用 pgloader将您的 MySQL 数据迁移到 Prisma Postgres。
- 为 Prisma Postgres 配置您的 Prisma 项目。
先决条件
- 现有 MySQL 数据库的连接 URL。
- 一个帐户。
- 已安装 Node.js 18+。
- 已安装 pgloader。
我们建议在单独的 git 开发分支中尝试此迁移。
1. 创建一个新的 Prisma Postgres 数据库
请按照以下步骤创建一个新的 Prisma Postgres 数据库
- 登录到并打开控制台。
- 在您选择的工作区中,单击 New project (新建项目)按钮。
- 在 Name (名称)字段中,键入项目的名称,例如 hello-ppg。
- 在 Prisma Postgres 部分,单击 Get started (开始使用)按钮。
- 在 Region (区域)下拉列表中,选择离您当前位置最近的区域,例如 US East (N. Virginia) (美国东部(弗吉尼亚北部))。
- 单击 Create project (创建项目)按钮。
数据库配置完成后,在 Set up database access (设置数据库访问权限)部分找到您的 Prisma Postgres 连接 URL 并保存以备后用,您将在下一步中需要它。
2. 直接连接到 Prisma Postgres 实例
在此步骤中,您将使用安全的 TCP 隧道连接到您的 Prisma Postgres 实例。
您将需要来自步骤 1的 Prisma Postgres 连接 URL
prisma+postgres://accelerate.prisma-data.net/?api_key=ey...
如果您的当前目录中已有一个带有 DATABASE_URL
设置的 .env
文件,则隧道 CLI 将自动拾取它,无需手动导出它。但是,如果您尚未设置 .env
文件,则需要显式设置 DATABASE_URL
环境变量。
要设置环境变量,请打开终端并将 DATABASE_URL
环境变量设置为您的 Prisma Postgres 数据库 URL 的值(将 __API_KEY__
占位符替换为您的实际数据库连接 URL 的 API 密钥)
export DATABASE_URL="prisma+postgres://accelerate.prisma-data.net/?api_key=__API_KEY__"
如果您在终端中显式设置了 DATABASE_URL
,则该值将优先于 .env
文件中的值。
接下来,使用 @prisma/ppg-tunnel
包启动 TCP 隧道,方法是执行以下命令
npx @prisma/ppg-tunnel --host 127.0.0.1 --port 5433
您可以通过使用 --port
和 --host
标志提供您自己的主机和端口值来指定不同的主机和端口。只需确保在本指南中始终一致地使用相同的主机和端口值。
Prisma Postgres auth proxy listening on 127.0.0.1:5433 🚀
Your connection is authenticated using your Prisma Postgres API key.
...
==============================
hostname: 127.0.0.1
port: 5433
username: <anything>
password: <none>
==============================
保持当前的终端窗口或选项卡打开,以便隧道进程继续运行并且连接保持打开状态。
3. 使用 pgloader 将您的 MySQL 数据迁移到 Prisma Postgres
现在您已经与您的 Prisma Postgres 实例建立了活动连接,您将使用 pgloader 将数据从您的 MySQL 数据库导出到 Prisma Postgres。
打开一个单独的终端窗口并创建一个 config.load
文件
touch config.load
在您首选的文本编辑器中打开 config.load
文件并复制粘贴以下配置
LOAD DATABASE
FROM mysql://username:password@host:PORT/database_name
INTO postgresql://user:[email protected]:5433/postgres
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)- 将
username
、password
、host
、PORT
和database_name
替换为您的 MySQL 数据库的实际连接详细信息。 - 确保您的连接字符串包含
useSSL=true
(如果需要 SSL),例如:mysql://username:password@host:PORT/database_name?useSSL=true
。请注意,当使用 PlanetScale 时,附加sslaccept=strict
将不起作用。
- 将
INTO
url(Postgres 数据库 URL)- 如果您使用自定义
host
和port
更新此项(在本例中,为了保持一致性,它是127.0.0.1
和端口5433
)。
- 如果您使用自定义
- 在
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 Postgres 配置您的 Prisma 项目
迁移数据后,您需要设置您的 Prisma 项目以使用 Prisma Postgres。步骤因您是否已在使用 Prisma ORM 而异。
如果您以前未使用 Prisma ORM
通过在您的项目目录中运行 npx prisma init
在您的项目中初始化 Prisma。这将创建一个 prisma
文件夹,其中包含 schema.prisma
文件和 .env
文件(如果尚不存在)。
在生成的 .env
文件中,更新 DATABASE_URL
以匹配您在步骤 1中收到的 Prisma Postgres 连接字符串
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
块中的 provider
从 mysql
更改为 postgresql
datasource db {
provider = "mysql"
provider = "postgres"
url = env("DATABASE_URL")
}
在生成的 .env
文件中,更新 DATABASE_URL
以匹配您在步骤 1中收到的新 Prisma Postgres 连接字符串
DATABASE_URL="prisma+postgres://accelerate.prisma-data.net/?api_key=__API_KEY__"
内省您新迁移的 Prisma Postgres 数据库并生成 Prisma Client
npx prisma db pull
此命令根据新的数据库模式刷新您的 Prisma 模型。
如果您之前使用过 Prisma Migrate
- 删除
prisma
目录中现有的migrations
文件夹。 - 基线化您的数据库以开始创建新的迁移。
恭喜!您已成功将 MySQL 数据库迁移到 Prisma Postgres 并配置了您的 Prisma 项目。您的迁移教程现已完成。