ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Prisma 本地集群 MySQL 直连实战:使用 Docker 与 SQL 直接访问数据库

Prisma 本地集群 MySQL 直连实战:使用 Docker 与 SQL 直接访问数据库 后端数据库GraphQL【免费下载链接】prisma1 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL MongoDB) [deprecated]项目地址https://gitcode.com/gh_mirrors/pr/prisma1点击查看免费下载导读本篇指南围绕 Prisma 1.x 本地开发集群中直接以 SQL 访问底层 MySQL 数据库这一场景展开。当你通过prisma local start启动本地 Prisma 服务后实际会有prismaPrisma 服务本身与prisma-db承载数据的 MySQL 5.7 服务器两个容器在运行。读完本文你将掌握如何定位prisma-db容器、如何通过docker exec进入 MySQL 客户端、如何识别并切换 Prisma 生成的数据库、如何直接执行SELECT/use/show tables等 SQL 命令排查或修改数据以及这些数据库命名与rawAccess配置背后的源码依据。背景本地 Prisma 集群中的两个容器如果你使用prisma local start启动了本地 Prisma 集群那么 Docker 中会运行两个容器prisma运行 Prisma 主服务对外暴露 GraphQL API默认端口见 docker-compose为4466prisma-db运行 MySQL 服务器真正存储你的业务数据。这套容器编排正是由prisma init生成的 docker-compose.yml 定义的prisma-db使用mysql:5.7镜像通过卷db-persistence:/var/lib/mysql持久化数据并将${DB_PORT}映射到容器内3306端口用于临时/调试时从宿主机访问。此外EndpointDialog.ts 中的数据库服务定义也确认了 MySQL 场景默认采用mysql:5.7镜像并设置MYSQL_ROOT_PASSWORD: prisma。下文假设你已经有一个正在运行的本地 Prisma 服务。第一步获取运行 MySQL 数据库的容器名首先列出正在运行的 Prisma 相关 Docker 容器docker ps --filter nameprisma请确认输出中存在一个名为prisma-db、镜像为mysql:5.7的容器。该容器名与 docker-compose.yml 中services.prisma-db.container_name: prisma-db的声明一致后续所有直连命令都依赖这个名字。第二步打开 MySQL 客户端确认容器存在后执行以下命令打开 MySQL 客户端prisma-db即上一步列表中的容器名docker exec -it prisma-db mysql -u root --host 127.0.0.1 --port 3306 --passwordgraphcool各参数含义参数作用docker exec -it prisma-db在prisma-db容器内以交互式终端运行命令mysql调用容器内置的 MySQL 客户端-u root使用 root 用户登录对应prisma init生成的 docker-compose 中MYSQL_ROOT_PASSWORD环境变量所设的用户--host 127.0.0.1 --port 3306连接到 MySQL 默认端口 3306--passwordgraphcool早期版本的内置密码注意文档写作时默认密码为graphcool该密码已在后续版本中变更为prisma见 EndpointDialog.ts 中MYSQL_ROOT_PASSWORD: prisma以及 prisma.yml 中的password: prisma。如果登录失败请优先尝试--passwordprisma或查看你所用版本对应的 docker-compose 环境变量。第三步向数据库发送 SQL 查询列出可用数据库MySQL 客户端打开后先查看当前可用的数据库show databases;输出类似--------------------------- | Database | --------------------------- | information_schema | | prisma | | logs | | mysql | | performance_schema | | sys | | service-id | ---------------------------其中与你的服务相关的有两个service-id该数据库名是服务名service name与阶段stage的组合形如servicestage例如my-servicedev。它保存了用于生成 GraphQL schema 的服务元信息。这一服务阶段编码规则与部署端实现一致在 MigrationsSpec.scala 中服务标识正是通过projectIdEncoder.toEncodedString(name, stage)生成的。prisma保存 Prisma 服务定义相关的元信息。其余如information_schema、mysql、performance_schema、sys为 MySQL 系统库logs用于内部日志日常直连排查一般无需关注。切换到你的服务数据库使用use命令选中你的服务数据库例如当你的service-id为my-servicedev时use my-servicedev;列出表切换后查看该数据库下的数据表show tables;输出示例以my-appdev为例---------------------- | Tables_in_my-appdev | ---------------------- | Post | | _RelayId | ----------------------其中Post对应你在数据模型datamodel中定义的类型_RelayId是 Prisma 用于 Relay 全局 ID 管理的内部表。直接编写查询现在就可以直接执行 SQL 了例如查询所有帖子SELECT * FROM Post;输出示例--------------------------------------------------------------------------------------------------------------------------------------------------------- | id | createdAt | updatedAt | isPublished | title | text | --------------------------------------------------------------------------------------------------------------------------------------------------------- | cjc82o6cg000b0135wpxgybf6 | 2018-01-09 20:12:02 | 2018-01-09 20:12:02 | 1 | Hello World | This is my first blog post ever! | | cjc82o6mo000d013599yzlwls | 2018-01-09 20:12:02 | 2018-01-09 20:12:02 | 1 | My Second Post | My first post was good, but this one is better! | | cjc82o6n4000f01350jortmv2 | 2018-01-09 20:12:02 | 2018-01-09 20:12:02 | 0 | Solving World Hunger | This is a draft... | ---------------------------------------------------------------------------------------------------------------------------------------------------------可以看到isPublished布尔字段在 MySQL 中以0/1存储而id/createdAt/updatedAt等由 Prisma 自动生成的字段也都在这里可见——这正适合用于核对 Prisma 自动生成的 ID、时间戳等数据或在 GraphQL API 之外做临时数据修正。查询完毕后退出 MySQLexit;进阶理解直连背后的配置与权限直接连入 MySQL 之所以可行除了容器间端口可达之外还依赖服务配置中的rawAccess开关。在 prisma.yml 中port: 4466 databases: default: connector: mysql host: 127.0.0.1 port: 3306 user: root password: prisma rawAccess: truerawAccess: true表示允许对该数据库连接开启原始访问能力。该选项在服务端配置加载器 ConfigLoader.scala 中被显式解析且默认值为falserawAccess rawAccess.getOrElse(false)。这意味着在本地开发 / 调试场景如prisma init生成的配置默认开启rawAccess允许你绕过 GraphQL 直接操作数据库在生产环境的配置中若未显式设置rawAccess: true则默认关闭不应再依赖本文所述方式直连而应通过 Prisma 的 GraphQL API 进行数据访问。小结本文给出了本地 Prisma 集群中直接使用 SQL 访问 MySQL 的完整路径docker ps定位prisma-db容器 →docker exec -it prisma-db mysql打开客户端 →show databases/use service-id/show tables/SELECT执行查询。同时结合仓库源码说明了prisma-db容器的来源docker-compose.yml、servicestage数据库命名规则MigrationsSpec.scala以及rawAccess配置的默认行为ConfigLoader.scala帮助你在本地开发时既能快速定位数据问题也清楚何时不该绕开 GraphQL 直接操作数据库。赞分享后端数据库GraphQL【免费下载链接】prisma1 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL MongoDB) [deprecated]项目地址https://gitcode.com/gh_mirrors/pr/prisma1点击查看免费下载相关推荐Prisma 数据库直连指南用 SQL 直接访问本地 Prisma 集群的 MySQL 数据库Prisma 数据库直连指南用 SQL 直接访问本地 Prisma 集群的 MySQL 数据库 导读 在本地开发 Prisma 服务时你通常通过 Graph后端数据库GraphQLPrisma 数据库直接访问指南使用 SQL 连接本地 MySQL 集群Prisma 数据库直接访问指南使用 SQL 连接本地 MySQL 集群 导读 本文面向使用 Prisma CLI 在本地开发环境中运行 Prisma 集群的后端数据库GraphQL使用 SQL 直接访问本地 Prisma 集群的 MySQL 数据库Docker 实战指南使用 SQL 直接访问本地 Prisma 集群的 MySQL 数据库Docker 实战指南 本指南面向通过 prisma local start 启动本地 P后端数据库GraphQL创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表