使用Drizzle执行db:push时遇数据库连接错误求助
Drizzle执行
db:push报错:Either "uri" or "host", "database" are required for database connection 问题背景
- 正在学习Drizzle,尝试将Schema推送到MySQL数据库,使用SQL Workbench管理,数据库密码为
admin npm run db:generate执行成功,已创建目标数据库- 执行
npm run db:push时触发连接参数缺失错误
配置文件内容
drizzle.config.ts
import type { Config } from "drizzle-kit"; import dotenv from "dotenv"; dotenv.config(); export default { schema: "./src/db/schema.ts", out: "./src/db/migrations", dbCredentials: { connectionString: process.env.DB_URL!, }, driver: "mysql2", } satisfies Config;
.env
DB_URL="mysql:admin@admin:3306/drizzlenode"
问题原因与修复方案
错误根源是MySQL连接字符串格式不符合标准,Drizzle无法解析无效的连接字符串,导致无法提取连接所需的主机、数据库名等参数。
1. 修正连接字符串格式
MySQL标准连接字符串格式为:
mysql://[用户名]:[密码]@[主机地址]:[端口]/[数据库名]
你的.env文件中DB_URL存在两处错误:
- 缺少协议部分的
// - 用户名与密码的分隔格式错误(应为
用户名:密码而非用户名@密码)
修正后的.env内容:
DB_URL="mysql://admin:admin@localhost:3306/drizzlenode"
注:若数据库主机不是本地localhost,替换为实际的IP地址或域名即可
2. 验证环境变量加载
可在drizzle.config.ts中临时添加日志,确认环境变量是否正确加载:
import type { Config } from "drizzle-kit"; import dotenv from "dotenv"; dotenv.config(); // 添加日志验证 console.log("Loaded DB_URL:", process.env.DB_URL); export default { schema: "./src/db/schema.ts", out: "./src/db/migrations", dbCredentials: { connectionString: process.env.DB_URL!, }, driver: "mysql2", } satisfies Config;
执行npm run db:push前,检查控制台输出的连接字符串是否与修正后的一致。
3. 重新执行推送命令
确认配置无误后,重新运行:
npm run db:push
内容的提问来源于stack exchange,提问作者Stykgwar
相关产品推荐
相关产品推荐

