无法将Planetscale数据库连接到NextJS项目(Prisma错误P1001)
项目架构
背景信息
我正在尝试把数据库接入我的NextJS项目,先用Mockaroo生成模拟数据,再通过Planetscale网页控制台创建表并插入Mockaroo生成的SQL数据。
已成功在Planetscale中创建表
问题描述
执行npx prisma studio时,报错:
Message: Error in Prisma Client request:
Invalid
prisma.mOCK_DATA.findMany()invocation:Can't reach database server at
us-east.connect.psdb.cloud:3306Please make sure your database server is running at
us-east.connect.psdb.cloud:3306.
执行npx prisma db pull时,报错:
Prisma schema loaded from prisma\schema.prisma
Environment variables loaded from .env
Datasource "db": MySQL database "MydbName" at "us-east.connect.psdb.cloud:3306"✖ Introspecting based on datasource defined in prisma\schema.prisma
Error: P1001
Please make sure your database server is running at
us-east.connect.psdb.cloud:3306.
schema.prisma配置
generator client { provider = "prisma-client-js" previewFeatures = ["referentialIntegrity"] } datasource db { provider = "mysql" url = env("DATABASE_URL") referentialIntegrity = "prisma" }
.env配置
DATABASE_URL="mysql://{username}:{password}@us-east.connect.psdb.cloud:3306/MydbName"
总结与解决方案
目前无法将Planetscale数据库接入NextJS项目,始终出现连接错误。试过网上的方案(比如调整SSL参数)都没用,比如在DATABASE_URL后追加?ssl_mode=require&sslcert==us-east-1-bundle.pem也没解决问题。
针对这个问题,可尝试以下步骤:
- 检查Planetscale的IP白名单设置:确认本地开发机器的IP已添加到Planetscale项目的允许列表中,Planetscale默认会限制未授权IP的访问。
- 修正SSL连接参数:Planetscale要求强制SSL连接,正确的DATABASE_URL参数应该是:
不需要指定本地证书文件,DATABASE_URL="mysql://{username}:{password}@us-east.connect.psdb.cloud:3306/MydbName?sslaccept=strict"sslaccept=strict参数即可满足Planetscale的SSL要求。 - 验证数据库凭证:确认
.env中的用户名和密码是Planetscale生成的正确凭证,注意不要包含特殊字符,若有需URL编码。 - 检查网络连接:尝试ping
us-east.connect.psdb.cloud,或者用telnet测试3306端口是否能连通,排除本地网络防火墙或代理的问题。 - 更新Prisma版本:确保使用的Prisma版本是最新稳定版,旧版本可能存在与Planetscale兼容的问题,执行
npm update prisma prisma-client-js更新。
内容的提问来源于stack exchange,提问作者Crunchy

