从现有数据库导入
本指南提供了将数据从现有 MySQL 数据库导入到 Prisma Postgres 的分步说明。
你可以通过以下四个步骤完成此迁移
- 创建新的 Prisma Postgres 数据库。
- 使用
@prisma/ppg-tunnel
包直接连接到 Prisma Postgres 实例。 - 使用 pgloader将你的 MySQL 数据迁移到 Prisma Postgres。
- 为你的 Prisma 项目配置 Prisma Postgres。
前提条件
- 你的现有 MySQL 数据库的连接 URL。
- 一个账户。
- 已安装 Node.js 18+。
- pgloader 已安装。
我们建议在单独的 git 开发分支中尝试此迁移。
1. 创建新的 Prisma Postgres 数据库
按照以下步骤创建一个新的 Prisma Postgres 数据库
- 登录到并打开控制台。
- 在你选择的工作区中,点击 新建项目 按钮。
- 在 名称 字段中输入你的项目名称,例如 hello-ppg。
- 在 Prisma Postgres 部分,点击 开始使用 按钮。
- 在 区域 下拉菜单中,选择离你当前位置最近的区域,例如 US East (N. Virginia)。
- 点击 创建项目 按钮。
数据库配置完成后,在 设置数据库访问 部分找到你的 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:password@127.0.0.1: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 数据库的实际连接详细信息。 - 如果需要 SSL,请确保你的连接字符串包含
useSSL=true
,例如:mysql://username:password@host:PORT/database_name?useSSL=true
。请注意,使用 PlanetScale 时,附加sslaccept=strict
将不起作用。
- 将
INTO
url (Postgres 数据库 URL)- 如果你正在使用自定义的
host
和port
,请使用你的 TCP 隧道详细信息更新此处(为了保持一致性,本示例中为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 项目配置 Prisma Postgres
数据迁移完成后,你需要设置你的 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 项目。你的迁移教程现已完成。