执行npx prisma migrate dev报错P1001:无法连接本地MySQL 3306端口
解决Prisma 5.2.2连接本地MySQL 8.2时的P1001错误
错误信息
执行npx prisma migrate dev时触发以下错误:
Environment variables loaded from .env Prisma schema loaded from prisma/schema.prisma Datasource "db": MySQL database "nextapp123" at "localhost:3306" Error: P1001: Can't reach database server at `localhost`:`3306` Please make sure your database server is running at `localhost`:`3306`.
配置文件
schema.prisma
generator client { provider = "prisma-client-js" } datasource db { provider = "mysql" url = env("DATABASE_URL") } model User { id Int @id @default(autoincrement()) email String @unique name String followers Int @default(0) isActive Boolean @default(true) }
.env
DATABASE_URL="mysql://root:Sqlnotmy1@localhost:3306/nextapp123"
已完成的排查操作
- 本地MySQL Server 8.2服务正常运行,3306端口处于监听状态
- 可通过DBeaver、DataGrip成功连接本地MySQL
- 已在
my.ini中配置bind-address = 0.0.0.0 - 尝试关闭防火墙
- 可正常连接PlanetScale在线MySQL并执行迁移
可行解决方案
1. 修复版本兼容性问题
Prisma 5.2.2对MySQL 8.2的支持存在适配缺陷,可通过以下方式解决:
- 降级MySQL:将MySQL 8.2降级至8.0.x系列(Prisma对该版本支持更成熟),再执行迁移命令
- 升级Prisma:更新到最新稳定版(如5.10+),新版本已修复高版本MySQL的兼容问题,执行命令:
npm install prisma@latest npx prisma generate
2. 替换连接地址
将DATABASE_URL中的localhost替换为127.0.0.1,绕开DNS解析可能出现的异常:
DATABASE_URL="mysql://root:Sqlnotmy1@127.0.0.1:3306/nextapp123"
3. 切换MySQL认证插件
MySQL 8.0+默认使用caching_sha2_password,部分客户端存在兼容问题,为root用户切换至mysql_native_password:
- 登录MySQL控制台:
mysql -u root -p - 执行修改命令:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Sqlnotmy1'; FLUSH PRIVILEGES; - 重启MySQL服务后重新执行
npx prisma migrate dev
4. 确认目标数据库存在
手动检查nextapp123数据库是否已创建,若未创建则先执行:
CREATE DATABASE nextapp123;
内容的提问来源于stack exchange,提问作者Manu Kapoor
相关产品推荐
相关产品推荐

